浮点舍入误差

输出是

x=1000300 y=1000000, z=1000300

我能理解我是怎么X和Z,但ç的Y输出是没有意义的。

#include <stdio.h> int main() { int i=0; float a = 100; a = a*a*a*a*a; float c = 3; float x = 1000000*c + a; float y = a; float z = 0; for (i=0; i<1000000; i++) { y += c; z += c; } z += a; x /= 10000; y /= 10000; z /= 10000; printf("x=%.0f y=%.0f, z=%.0f\n", x, y, z); }

--------------解决方案-------------

在值y在1E10开出(从分配到a )。 你加3到上万遍。

麻烦的是,一个float至多有7显著十进制数字,让您有效地不改变y每一次,因此,10000分的结果是10,000,000 1,000,000显示。

如果用它编码double ,你会看到更接近您所期望的结果。

分类:C# 时间:2015-03-16 人气:36
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.530 (s). 11 q(s)