如何处理 c++ 中接近零的值?
How do I handle values close to zero in c++?
我正在尝试编写一个采用初始的迭代函数
double t = /*formula 1*/;
然后计算
for (auto i = 0; i < bigNumber; ++i)
{
temp = /*formula 2*/;
t = t*temp;
}
这工作正常,除非初始t
太小以至于C++自动将其设置为零(实际上不应该为零(。
当然,t
将永远保持为零,因为我们将其乘以自身,这就是问题所在。
我尝试通过将t
设置为等于一些非常小但非零的数字来解决这个问题,以防C++将其设置为零,但这不起作用,因为那样,我最终会遇到相反的问题,因为一旦我们迭代了足够多的次数,t
最终就会爆炸。
如何解决此问题?
可能值得一提:
第一个公式(公式1(涉及类似exp(-verybignumber)
的东西,第二个公式涉及像pow(i, -1)
这样的东西,这意味着随着迭代次数的增加,它变得非常小。
正如您刚刚发现的那样,浮点运算并非微不足道。这与C++无关,而是与IEEE 754标准有关。
您需要确保的一件事是保持在正常数字范围内。也就是说,确保整个计算过程中的值不会变得太小或太大。
在某些情况下,这很容易,也许重新缩放输入数据就足够了。在其他情况下,也许您必须重新考虑您的方程式(步骤(以避免这种情况。
有时你可以简单地使用更大的类型,例如long double
甚至__float128
(四边形,检查libquadmath(。
其他解决方案是使用任意精度的数字(使用GMP和MPFR等库;不要尝试自己作为初学者(甚至符号计算。这完全取决于您需要的性能。
请注意,在处理浮点运算时还有许多其他陷阱。
相关文章:
- 查找最接近的大于当前数字的数字的索引
- 班级的朋友是不可接近的
- 必须首先打印向量 v1 中最接近整数 x 的数字<int>
- 如何处理 c++ 中接近零的值?
- 静态库大小接近 400MB
- 查找索引的最接近的真实值
- 如何优化代码以返回最接近给定整数的数字,但给定列表中不存在?
- C++ lower_bound() 搜索最接近目标值的元素
- C++有效地找到向量中第一个最接近的匹配值?
- 在结构向量中查找最接近的值
- 在排序数组中搜索最接近的 int 值 <= 从右起给定值
- 当相机接近模型时,SSAO样本内核会导致性能下降?
- 最接近"std::atomic<std::vector>"是什么?
- C++中最接近 Lua 表操作的东西是什么?
- 在std::集中获取与给定元素最接近的元素
- 查找整数数组中最接近的数字
- Systemc - 将sc_time四舍五入到最接近的第 10 SC_NS
- 我是 c++ 的新手,有没有一种算法可以找到 3d 数组中最接近的 0 的距离?
- 我的程序不断四舍五入到最接近的整数
- 3 与错误最接近的总和:字符串常量之前的预期非限定 id