Mat*_*rge 5 c++ double numeric-limits
至少在我自己的脑海中,我遇到了一些奇怪的行为,同时调试了一些涉及确定添加操作是否会使double下溢的代码.这是一个展示我发现的示例程序.
#include <iostream>
#include <limits>
using std::cout;
using std::endl;
using std::numeric_limits;
int main()
{
double lowest = numeric_limits<double>::lowest();
bool truth = (lowest + 10000) == lowest;
cout << truth << endl;
}
Run Code Online (Sandbox Code Playgroud)
当我执行此代码时,我得到了结果.这是一个错误还是我只是被剥夺了睡眠?
Joh*_*ica 15
最小的双倍是:
-1.7976931348623157e+308
Run Code Online (Sandbox Code Playgroud)
如果双精度具有300+以上的精度,那么将10,000或1e4添加到此将只会产生明显的效果,但他们绝对不会这样做.双打只能保持15-17位有效数字.
这两个数字之间的幅度差异是如此之大,以至于增加10,000不会产生新的数字.事实上,最小的双倍是如此巨大的数字(可以这么说),你可以添加一个googol - 它是1后跟一百个零 - 它不会改变.
| 归档时间: |
|
| 查看次数: |
134 次 |
| 最近记录: |