当我使用以下代码执行简单的x64应用程序时,在具有i7-3770和i7-4790 CPU的Windows PC上,我得到了不同的结果。
#include <cmath>
#include <iostream>
#include <limits>
void main()
{
double val = exp(-10.240990982718174);
std::cout.precision(std::numeric_limits<double>::max_digits10);
std::cout << val;
}
在i7-3770上的结果:
3.5677476354876406e-05
在i7-4790上的结果:
3.5677476354876413e-05
当我修改要调用的代码
unsigned int control_word;
_controlfp_s(&control_word, _RC_UP, MCW_RC);
在调用exp函数之前,两个CPU都提供相同的结果。
我的问题:
最佳答案
假设double是使用IEEE-754和decimal to binary converter编码的,则可以看到:
它们仅在最后一位不同,可能是由于舍入误差。