我有一些数学(在C++中),其中似乎将生成一些非常小的,接近零的数字(我怀疑trig函数调用是我真正的问题),但我想检测这些情况,以便我可以更详细地研究它们。如何检查和处理非常接近零的数字
我目前正在尝试以下,是否正确?
if (std::abs(x) < DBL_MIN) {
log_debug("detected small num, %Le, %Le", x, y);
}
二,数学的本质是三角函数的性质(又名采用了很多弧度/度的转换和sin
/cos
/tan
电话等),我可以做什么样的变革,以避免数学错误?
很显然,乘法运算可以使用log transform - 还有什么?
我们可以请看一个上述数学的例子,以便我们可以设计一些优雅的东西?当我可以在零点附近缓慢地改变结果时,我脑海中的东西就像'cos x - 1',必须仔细选择容差。 –
至于避免下溢的转换,最直接的就是泰勒扩展你的表达式,并使用小的参数。例如,而不是'1-cos(x)'使用'x * x/2'来表示'x'小于某个临界值。 –