本文介绍了漂浮在C奇怪IM precision错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
今天发生在我身上一个奇怪的东西,当我尝试编译并执行此code的输出是不是我的预期。这里是code,简单地浮动值添加到一个float数组,然后打印出来。
简单的code:
INT的main(){
浮 - [R [10];
INT Z者除外;
INT I = 34;
对于(Z = 0; z,其中; 10; Z ++){
我= Z * Z * Z;
- [R [Z] =我;
- [R [Z] = R [Z] 0.634;
的printf(%F \\ N,R [Z]);
}
}
输出:
0.634000
1.634000
8.634000
27.634001
64.634003
125.634003
216.634003
343.634003
512.633972
729.633972
请注意从0.634后出现27数字,不应该存在。任何人都知道为什么会这样?这是造成浮点近似的事件吗?..
P.S我有一个Linux的Debian系统,64位
感谢所有
解决方案
一个数字可能重新在以下表格psented $ P $:
So there will be rounding or relative errors when the space is less in memory.
From wiki:
The IEEE 754 standard specifies a binary32 as having:
Sign bit: 1 bit
Exponent width: 8 bits
Significand precision: 24 bits (23 explicitly stored)
Edit (Edward's comment): Larger (more bits) floating point representations allow for greater precision.
这篇关于漂浮在C奇怪IM precision错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!