ggr*_*grr 9 c c++ floating-point precision floating-accuracy
例如,0,0.5,0.15625,1,2,3 ......是从IEEE 754转换而来的值.它们的硬编码版本是否精确?
例如:
是
float a=0;
if(a==0){
return true;
}
Run Code Online (Sandbox Code Playgroud)
总是回归真实?其他例子:
float a=0.5;
float b=0.25;
float c=0.125;
Run Code Online (Sandbox Code Playgroud)
a*b总是等于0.125而a*b == c总是如此?还有一个例子:
int a=123;
float b=0.5;
Run Code Online (Sandbox Code Playgroud)
a*b总是61.5?或者一般来说,整数乘以IEEE 754二进制浮点精确?
或者更一般的问题:如果值是硬编码并且值和结果都可以用IEEE 754中的二进制格式表示(例如:0.5 - 0.125),那么值是否精确?
浮点数没有固有的模糊性.只是有些(但不是全部)实数无法准确表示.
比较固定宽度的十进制表示,比方说三位数.可以使用1.00表示整数1,并且可以使用0.10表示1/10,但是只能使用0.33来近似1/3.
如果我们改为使用二进制数字,则整数1表示为1.00(二进制数字),1/2表示为0.10,1/4表示为0.01,但1/3可以(再次)仅表示近似值.
但有些事情需要记住:
(我的看法是,它实际上是一个合理的第一次近似地说,是的,浮点数是固有的模糊,所以,除非你确信你的特定应用程序就可以搞定,远离他们.)
有关您可能需要或想要的更多详细信息,请阅读着名的每个计算机科学家应该知道的关于浮点运算的内容.此外,这个更易于访问的网站:浮点指南.
| 归档时间: |
|
| 查看次数: |
794 次 |
| 最近记录: |