c# - 如何将大于 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;
}
解决方案
你可以试试这个方法
var tolerance = 1e-10;
var fraction = a[j, lead] - Math.Truncate(a[j, lead];
if (fraction<tolerance)
{
a[j, lead] = 0;
}
推荐阅读
- c++ - 在 C++ 中何处使用 override 关键字
- javascript - 用于多个语义 UI 主题的语义 UI 主题构建器,支持 Font Awesome 类名和原始语义 UI React 文档演示
- mongodb - mongoengine ReferenceField 的确切含义?
- android - 添加 glide 4.8.0 依赖 gradle build 后出现错误 多个 dex 文件定义 Landroid/arch/lifecycle/MutableLiveData;
- r - 确定垂直于 R 中(海岸线)线的横断面
- apache - OpenClinica 上 favicon 的 Apache 重定向问题
- python - Python pandas 与现有工作表合并并保存
- c++ - 在不同的属性表中定义用户宏
- java - 水壶问题:参数值不起作用,使用“trans.sendToSlaveServer”启动trans
- ruby - 在程序启动时加载或写入设置