我必须在我的代码中使用诸如 1e-15 之类的值,但我不能。实际上,由于精度低,这些值等于 0。有什么想法吗?
如何处理C中非常低的数值?
计算科学
C
精确
2021-12-08 08:39:30
1个回答
最好的办法是重新调整你的问题,这样你就没有这么小的值。如果可以,请执行此操作并收工。
如果每个数字都很小,那么由于次正规浮点数,您仍然可以。人们在评论中提到了这一点,并在此处解决:
https://stackoverflow.com/questions/8341395/what-is-a-subnormal-floating-point-number
但是,次正规数的计算速度较慢,因此尝试避免它们是正常的。此外,因为它们小于机器 epsilon,所以它们的表现不佳(最简单的例子是,如果你在其中任何一个上加 1,你就会得到 1)。它将以弥补差距的方式相乘和相加,并且您需要支付额外的费用来计算它们。
所以重新调整你的问题。
或者使用 quads、BigFloats、Arbs、128 位十进制浮点数。如果您使用 Julia,BigFloats 在 Base 中,Arbs 在 ArbFloats.jl 中,小数在 DecFP.jl 中。由于类型通用性,您通常可以用这些数字类型替换任何算法,并且它应该可以正常工作(即使在包中的代码中,如果作者没有改写他们的函数)。
但首先,尝试重新调整您的问题。
其它你可能感兴趣的问题