我的程序将长双精度矢量作为输入(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
经过一些研究,我发现该值超出了可用于其自身类型的内存空间。
所以问题是:是否有可能在我的代码中处理这个问题?或者唯一的解决方案是输入较小的数字?
答案 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
,而不会进一步搞乱。