Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.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
Visual c++ floor()行为异常VC++;_Visual C++ - Fatal编程技术网

Visual c++ floor()行为异常VC++;

Visual c++ floor()行为异常VC++;,visual-c++,Visual C++,我正在做一些编码,突然对floor()的奇怪行为感到惊讶。导致错误的一条线如下所述: printf("%f",floor(310.96*100)); 输出为31095.0000 为什么会发生这种情况?浮点数不是100%精确的310.96*100可能导致31095.9999999。。。因此您的结果,请参见浮点数不是100%精确的310.96*100可能会导致31095.9999999。。。因此,请参见您的结果,这是典型的。常量值310.96不能以浮点数表示。相反,最接近的浮点值表示形式是310.

我正在做一些编码,突然对floor()的奇怪行为感到惊讶。导致错误的一条线如下所述:

printf("%f",floor(310.96*100));
输出为
31095.0000


为什么会发生这种情况?

浮点数不是100%精确的310.96*100可能导致31095.9999999。。。因此您的结果,请参见

浮点数不是100%精确的310.96*100可能会导致31095.9999999。。。因此,请参见您的结果,这是典型的。常量值
310.96
不能以浮点数表示。相反,最接近的浮点值表示形式是
310.9599914550781

你可以试试你自己。将其乘以
100
并用
floor()
截断,得到
31095.0000

这是一个典型的例子。常量值
310.96
不能以浮点数表示。相反,最接近的浮点值表示形式是
310.9599914550781


你可以试试你自己。将该值乘以
100
,并用
floor()截断(
结果为
31095.0000

,但为什么在310.95或310.97中不发生相同的情况??温度=310.96*100;地板(温度);输出是31096……为什么不在这里发生?如果你在我链接的站点上查看,你可以看到
310.95
最接近的浮点表示是
310.95001220703125
,它大于
310.95
,因此乘法结果的
floor()
(在本例中)将导致预期值。一般的经验法则是,不依赖精确的摆动点值,而是了解其局限性并对此进行补偿,使用范围或适当的舍入机制,但为什么在310.95或310.97??温度=310.96*100时不发生同样的情况;地板(温度);输出是31096……为什么不在这里发生?如果你在我链接的站点上查看,你可以看到
310.95
最接近的浮点表示是
310.95001220703125
,它大于
310.95
,因此乘法结果的
floor()
(在本例中)将导致预期值。一般的经验法则是,不依赖精确的摆动点值,而是了解其局限性,并通过使用范围或适当的舍入机制进行补偿