- 论坛徽章:
- 0
|
回复 47# x5miao
你是说编译器开优化了对吧,就算不优化也会输出1。开优化是由编译器去四舍五入,不开优化是由库函数去四舍五入。编译器和库函数一起保证了你的代码不会存在优化前后不一致的bug。- unsigned long long a = 0x3fefffffffffffff; // 0.9999999999...
- unsigned long long b = 0x3ff0000000000000; // 1.000000
- int main(int argc, char *argv[])
- {
- printf("%f\n", (*((double*)(&a)))); // 1.000000
- printf("%f\n", (*((double*)(&b)))); // 1.000000
- getchar();
- return 0;
- }
复制代码 软件模拟浮点计算在输入输出的时候都要四舍五入。gcc使用的mpfr库进行编译期计算,参看mpfr的介绍:
The MPFR library is a C library for multiple-precision floating-point computations with correct rounding |
|