这些是 c 语句。为什么 10.12 没有显示预期值?
<块引用>int main(){
printf("10.10 =%.15lf\n",1.10);
printf("10.12 = %.15lf\n",10.12);
printf("10.15 = %.15lf\n",10.15);
return 0; }
预期输出:-
10.10 =10.100000000000000
10.12 = 10.120000000000000
10.15 = 10.150000000000000
实际输出:-
10.10 =10.100000000000000
10.12 = 10.119999999999999
10.15 = 10.150000000000000
答案 0 :(得分:3)
典型的 double
可以准确表示大约 264 个不同的值。 10.12 不是其中之一,因为每个可编码值都是一些 53 位整数乘以 2 的某个幂,并且 1012/100 不能完全表示为这样的。取而代之的是对附近的值进行编码:5697053528623677 * 2-49。
10.119999999999999218...
当以足够的十进制进动打印时,会出现与 10.12 的舍入差异。
如果使用更高的精度,则 10.10 和 10.15 相同。
// 123456789012345
10.099999999999999644...
10.119999999999999218...
10.150000000000000355...
答案 1 :(得分:1)
简单的原因是这个管道:
10.12
,一个十进制数