hri*_*007 1 c++ floating-point
#include<iostream.h>
using namespace std;
int main()
{
float x=1.1;
if(x==1.1)
cout<<"yes";
else
cout<<"no";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我将值 1.1 分配给 x 并检查 x 的值是否为 1.1?
您已经进入了几乎所有编程语言的一个有趣领域。浮点值是很棘手的事情,并且很少建议测试它们是否相等。基本问题是现代计算机上的浮点值被表示为具有有限位数精度的二进制小数。
\n\n为了使这一点更容易理解,我们使用以 10 为基数的小数并使用无法准确表示的数字。取1/3。如果将其表示为以 10 为基数的小数,则会得到以下结果:
\n\n0.\xcc\x853(如果未正确显示,则三个上方会有一个栏)。基本上,它会永远持续下去,没有有限数量的数字可以完美准确地将 1/3 表示为十进制小数。因此,如果你只有这么多数字,你可以将其截断并近似:
0.333333
这实际上是 333333/1000000,非常接近 1/3,但又不完全是。
\n\nC++ 有几种不同的浮点类型。这些类型通常(取决于程序编译的平台)具有不同数量的有效数字。默认情况下,浮点常量的double数字通常比 a 多float(而且永远不会少)。再次以基数 10 为例,因为您将值存储在float您正在执行以下操作:
0.333333 == 0.3333333333333333333
这当然是错误的。
\n\n如果您这样编写代码:
\n\n#include <iostream>\nusing namespace std;\nint main()\n{\n float x = 1.1f;\n if(x == 1.1f)\n cout<<"yes";\n else\n cout<<"no";\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n您可能会得到预期的结果。将 an 放在f裸浮点值(也称为浮点文字)的末尾告诉 C++ 它的类型float。
当然,这一切都非常令人着迷,并且有很多值得深入研究的地方。如果您想了解有关浮点数如何真正表示的更多信息,可以查看有关IEEE 754 浮点表示的不错的维基百科页面,这是当今大多数现代处理器表示浮点数的方式。
\n\n从实际角度来看,您应该很少(如果有的话)比较浮点数是否相等。通常,这样做表明程序中存在某种设计缺陷。如果您确实必须使用“epsilon”比较。基本上,测试一下你的数字是否“足够接近”,尽管确定在任何给定情况下这意味着什么并不一定是一项微不足道的任务,这就是为什么如果你需要比较它们,它通常代表一个设计缺陷根本平等。但是,就您而言,它可能看起来像这样:
\n\n#include <iostream>\n#include <cmath>\nusing namespace std;\nint main()\n{\n float x=1.1;\n if (fabs(x - 1.1) < 0.000001)\n cout<<"yes";\n else\n cout<<"no";\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1992 次 |
| 最近记录: |