C ++ cout在两个大十进制数之间的操作后打印“inf”(long double)

时间:2016-11-30 16:17:17

标签: c++ c++11

我的程序将长双精度矢量作为输入(vector<long double>)并使用某些方法计算不同的解。

一切正常,直到我尝试这两个数字:1.18973e + 4932和1.18973e + 4932。

输出以下内容:

<2: 1.18973e+4932 1.18973e+4932 >

Min: 1.18973e+4932
Max: 1.18973e+4932
Range: 0
Midrange: inf
Median: inf
Mean: inf
Variance: inf
StdVariance : inf

经过一些研究,我发现该值超出了可用于其自身类型的内存空间。

所以问题是:是否有可能在我的代码中处理这个问题?或者唯一的解决方案是输入较小的数字?

1 个答案:

答案 0 :(得分:1)

根据编译器选择对代码执行的操作,缩放 可能 有所帮助:

if (!string.IsNullOrWhiteSpace(ReasonTextBox.Text))

当示例$ cat s.cpp #include <iostream> int main() { long double v = 1.18973e+4932L; std::cout << "Midrange: " << (v + v) / 2 << '\n'; std::cout << "Midrange again: " << (v/2 + v/2) << '\n'; return 0; } $ g++ s.cpp -Wall -O2 -o s $ ./s Midrange: inf Midrange again: 1.18973e+4932 min相等时,您也可以避免计算任何内容,只需设置 mean midrange 中位数等于任一值,范围方差标准差max,而不会进一步搞乱。