我正在用c ++编写一个程序,我想找到我的电脑的epsilon。 我希望结果是双精度(即2.2204460492503131 E-16),但输出是1.0842 E-019,这是长双精度的epsilon。
我的节目是这样的:
#include <iostream>
double e = 1.0;
double x;
int main ()
{
for (int i = 0; e + 1.0!=1.0 ; i++)
{
std::cout<<e<<'\n';
x = e;
e/=2.0;
}
std::cout << "The epsilon of this Computer is "<< x <<'\n';
return 0;
}
答案 0 :(得分:0)
输出std::numeric_limits<double>::epsilon()
。 std::numeric_limits
在标准标题<limits>
中声明。
更常用的技术,如果你真的必须计算它(而不是相信你的标准库来提供正确的值)
double epsilon = 1.0;
while ((1.0 + 0.5 * epsilon) != 1.0)
epsilon *= 0.5;
或进行计算。
请注意(虽然您没有说明如何操作)但实际上您的long double
计算可能不正确,因为文字浮点值(如1.0
)默认为类型double
,而不是long double
- 这可能表示错误在于您计算long double
结果,而不是double
结果。如果您希望结果属于类型long double
,建议将所有字面值(1.0
,0.5
)设为L
后缀,以强制它们为long double
类型
还要记住在将结果值传输到std::cout
时使用适当的格式,以确保输出也具有您需要的准确度/精度。默认设置(如果不控制格式,则获得的设置)可能不同。