fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. union F2U {
  5. float fl;
  6. unsigned ui;
  7. };
  8.  
  9. void printFloat(const char* name, float x) {
  10. F2U f;
  11. f.fl = x;
  12. printf("%s = %f \t 0x%x\n", name, f.fl, f.ui);
  13. }
  14.  
  15. float fromUint( uint i) {
  16. F2U f;
  17. f.ui = i;
  18. return f.fl;
  19. }
  20.  
  21. int main() {
  22.  
  23. float a = 0.1f;
  24.  
  25. float b = fromUint(0x36400497);
  26.  
  27. printFloat("a", a);
  28. printFloat("b", b);
  29.  
  30. const float split = 8193.0;
  31.  
  32. float ca = split * a;
  33. float cb = split * b;
  34.  
  35. float v1a = ca - (ca - a);
  36. float v1b = cb - (cb - b);
  37.  
  38. printFloat("v1a", v1a);
  39. printFloat("v1b", v1b);
  40.  
  41. return 0;
  42. }
Success #stdin #stdout 0s 15232KB
stdin
Standard input is empty
stdout
a = 0.100000 	 0x3dcccccd
b = 0.000003 	 0x36400497
v1a = 0.099976 	 0x3dccc000
v1b = 0.000003 	 0x36400000