首页 > 解决方案 > 如何将大于 1e-8 的浮点值强制为 0

问题描述

我目前正在努力实现矩阵前向缩减,到目前为止它几乎通过了我所有的测试用例。但是,我在舍入浮点值时遇到问题。我通过简单地添加 -1*a[j,col]/a[i,col] 来减少枢轴元素下方的非零行,其中 i = 枢轴,并且 j 在 i + 1 处初始化,向下迭代直到所有行都完毕。

但是,假设我希望浮点比较的容差为 1e-10。如果 a[j,col] 中的值超出此容差,我如何将它们强制为零?

在某些情况下,在我的测试用例中,我的值在 1e-14 到 1e-15 之间,应该为零。我尝试的当前案例如下所示,但这不起作用。谁能指出我正确的方向?'

这是我第一次尝试比较浮点值,我读过这可能很困难,所以我希望有人能帮我解决这个问题,因为它目前迫使我的应用程序处于静止状态,直到它被修复。

var tolerance = 1e-10;
if (a[j, lead] < a[j, lead]*tolerance) { 
    a[j, lead] = 0; 
}

标签: c#precisiongaussian

解决方案


你可以试试这个方法

var tolerance = 1e-10;
var fraction = a[j, lead] - Math.Truncate(a[j, lead];
if (fraction<tolerance)
{
    a[j, lead] = 0;
}

推荐阅读