【发布时间】:2010-02-13 10:47:39
【问题描述】:
我正在用 e 和 s 计算 g,它们都是双精度数。之后我想截掉第二个之后的所有数字并将结果保存在x中,例如:
g = 2.123 => x = 2.12
g = 5.34995 => x = 5.34
等等。我用...
g = 0.5*e + 0.5*s;
x = floor(g*100)/100;
...而且它在大多数情况下都能正常工作。但有时我会得到奇怪的结果。例如:
e = 3.0 s = 1.6 g = 2.30 但是 x = 2.29!!!
所以我试图追查错误:
g = 0.5*e + 0.5*s;
NSLog(@"%f",g);
给我 g = 2.30
g = g * 100;
NSLog(@"%f",g);
给我 g = 230.0
x = floor(g);
NSLog(@"%f",x);
结果 x = 229.0 !!!
我不明白!请帮忙! :-)
【问题讨论】:
-
供您阅读:每个计算机科学家都应该了解浮点运算 docs.sun.com/source/806-3568/ncg_goldberg.html
-
这与 Objective-C 甚至 C 无关,真的。
-
您希望以 2 个十进制数字存储这些数据的任何特殊原因?
-
可能会更糟;您的浮点错误可能导致 28 人死亡。 gao.gov/products/IMTEC-92-26
标签: c objective-c math floating-point