Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VC+上的浮点乘法+;2008年快车_C_Visual Studio 2008 - Fatal编程技术网

VC+上的浮点乘法+;2008年快车

VC+上的浮点乘法+;2008年快车,c,visual-studio-2008,C,Visual Studio 2008,为什么要使用下面的代码段 int i = 30; int p = 0.7f * i; printf("p is %d\n", p); 在vc++2008 express上给出20而不是21? 我知道这是个老编译器 数字0.7不能用编译器用于float的基于二进制的浮点格式表示。当十进制数字“0.7”转换为浮点时,结果是最接近的可表示值。这个数字略低于0.7 将其与30相乘产生一个略低于21的数字,将其转换为int并进行截断产生20。值0.7不能在浮点变量中精确表示。请查看并注意,20.9999

为什么要使用下面的代码段

int i = 30;
int p = 0.7f * i;
printf("p is %d\n", p);
在vc++2008 express上给出20而不是21?
我知道这是个老编译器

数字0.7不能用编译器用于
float
的基于二进制的浮点格式表示。当十进制数字“0.7”转换为浮点时,结果是最接近的可表示值。这个数字略低于0.7


将其与30相乘产生一个略低于21的数字,将其转换为
int
并进行截断产生20。

0.7
不能在浮点变量中精确表示。请查看并注意,
20.999999
将被截断为
20
。感谢您提供的链接,但我更好奇的是,Microsoft在VC++2019中应该做哪些更改,因为它给出了正确的数学结果。您是指使用精确的代码,还是当您使用
printf
浮点值时?也许2008年的浮点实现略有不同。好主意!但是我不打印floatint点值,它已经被转换为int。我想我可以通过查看两个编译器生成的汇编程序来回答自己的问题。也许旧的PC使用的是80x87 FPU。关键是,你不应该依赖于浮点运算的精度。