gpt4 book ai didi

c++ - double 可以溢出到负值吗?

转载 作者:太空狗 更新时间:2023-10-29 21:02:45 28 4
gpt4 key购买 nike

您好,我正在使用 g++ 编译器并且遇到(我认为的) double 下溢,这可能吗?如果是的话,行为是如何定义的

我已经在此处上传了协方差矩阵 (51x51) 的 csv 格式:http://pastebin.com/r0fx1qsx

这是我用来计算行列式的代码(在 C++ 中需要 boost)(我已经切换到长 double 并且没有效果):

int determinant_sign(const boost::numeric::ublas::permutation_matrix<std ::size_t>& pm)
{
int pm_sign=1;
std::size_t size = pm.size();
for (std::size_t i = 0; i < size; ++i)
if (i != pm(i))
pm_sign *= -1.0; // swap_rows would swap a pair of rows here, so we change sign
return pm_sign;
}

long double determinant( boost::numeric::ublas::matrix<long double>& m ) {
boost::numeric::ublas::permutation_matrix<std ::size_t> pm(m.size1());
long double det = 1.0;

if( boost::numeric::ublas::lu_factorize(m,pm) ) {
det = 0.0;
} else {
for(int i = 0; i < (int)m.size1(); i++)
det *= m(i,i); // multiply by elements on diagonal
det = det * determinant_sign( pm );
}
return det;
}

我得到的数据结果是-3.59916e-183

当我运行以下 matlab 代码时:

M = csvread('path/to/csv');
det(M)
the result I get is:

4.2014e-173

如您所见,一个是(稍微)积极的,而一个是(稍微)消极的

最佳答案

假设浮点单元正确运行,它不会溢出到负值——如果值超出有效范围,结果将是“+INF”(正无穷大)。这只会发生在有符号整数上。

当然,在预期为肯定答案时给出否定答案的计算中完全有可能出现各种错误。

关于c++ - double 可以溢出到负值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14961466/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com