我是初学者,但我认为同样重要的是我认为我应该尽快学习。 所以我有一个代码:
float fl=8.28888888888888888888883E-5;
cout<<"The value = "<<fl<<endl;
但是运行后我的.exe文件显示:
8.2888887845911086e-005
我怀疑要限制类型和其余部分的数字将是零,但我看到数字是随机的。也许它在变量之后从内存中给出数字? 你能解释一下它是如何工作的吗?
最佳答案
I suspected the numbers to limit of the type and rest will be the zero
是的,这正是发生的事情,但它以二进制形式发生。此程序将使用十六进制打印格式显示它 %a
:
#include <stdio.h>
int main(int c, char *v[]) {
float fl = 8.28888888888888888888883E-5;
printf("%a\n%a\n", 8.28888888888888888888883E-5, fl);
}
显示:
0x1.5ba94449649e2p-14 0x1.5ba944p-14
在这些结果中,0x1.5ba94449649e2p-14
是最接近 8.28888888888888888888883*10-5 的 double
的十六进制表示,并且 0x1.5ba944p-14
是该数字转换为 float
的表示。如您所见,转换只是截断了最后一位数字(在这种情况下。转换是根据舍入模式完成的,当舍入向上而不是向下时,它会更改最后一位或多位数字)。
当您观察decimal 中发生的情况时,float
和double
是binary float 这一事实您计算机上的格式意味着在值的表示中有额外的数字。
关于C++ 变量类型 - 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34049902/