The*_*ist -2 c++ floating-point
编辑:这里有很多不满的成员,因为这个问题在网站上有重复.在我的辩护中,我尝试首先搜索答案,也许我使用的搜索关键字很差,但我找不到这个特定代码示例的直接,明确的答案.我很少知道**2009**中有一个会从那里链接到那里.
这是一个编码示例:
#include <iostream>
using namespace std;
int main() {
float x = 0.1 * 7;
if (x == 0.7)
cout << "TRUE. \n";
else
cout << "FALSE. \n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这导致FALSE.但是,当我输出x时,确实输出为0.7.说明?
首先,0.1是一个字面的类型double.IEEE 754双精度中最接近可表示的值为0.1:
0.1000000000000000055511151231257827021181583404541015625
Run Code Online (Sandbox Code Playgroud)
如果将其乘以7,则IEE 754单精度中最接近的可表示值(因为您将其存储在a中float)是:
0.699999988079071044921875
Run Code Online (Sandbox Code Playgroud)
如你所见,这几乎是0.7,但并不完全.然后将其转换为a double进行比较,最后比较以下两个值:
0.699999988079071044921875 == 0.6999999999999999555910790149937383830547332763671875
Run Code Online (Sandbox Code Playgroud)
当然评估为false.
| 归档时间: |
|
| 查看次数: |
2259 次 |
| 最近记录: |