fork download
  1. #include <stdio.h>
  2. #include <inttypes.h>
  3.  
  4. #pragma pack(push, 1)
  5. typedef union{
  6. double d;
  7. uint64_t ui;
  8. } Unskiloza;
  9. #pragma pack(pop)
  10.  
  11.  
  12. int main() {
  13. Unskiloza x, y;
  14. x.d = 4.0000000000000;
  15. y.d = 3.9999999999999;
  16.  
  17. printf("x.ui = %#llx\n", x.ui);
  18. printf("y.ui = %#llx\n", y.ui);
  19. printf("x.ui - y.ui = %lld\n", (x.ui-y.ui) & 0x7FFFFFFFFFFFF000L); // 0
  20. printf("x.ui - y.ui = %lld\n", (x.ui-y.ui) ); // 225
  21. printf("x - y = %0.2e\n", x.d - y.d); // 1.00e-013
  22. printf( 0== ((x.ui-y.ui) & 0x7FFFFFFFFFFF0000L) ? "is nearly equals" : "not equals at all" );
  23.  
  24. return 0;
  25. }
Success #stdin #stdout 0s 4500KB
stdin
Standard input is empty
stdout
x.ui =  0x4010000000000000
y.ui =  0x400fffffffffff1f
x.ui - y.ui =  0
x.ui - y.ui =  225
x - y =  9.99e-14
is nearly equals