我在C++中进行一些数学计算,看起来会生成一些非常接近于零的小数(我怀疑三角函数调用可能是我的真正问题),但我希望能够检测这些情况,以便更详细地研究它们。
我目前正在尝试以下内容,它正确吗?
if ( std::abs(x) < DBL_MIN ) {
log_debug("detected small num, %Le, %Le", x, y);
}
其次,数学的性质是三角函数(即使用大量弧度/度数转换和 sin
/cos
/tan
函数等),那么我可以采取什么样的变换来避免数学错误?
显然,对于乘法,我可以使用对数变换 - 还有其他哪些方法吗?
cos x - 1
这样的东西,当你在零附近得到缓慢变化的结果时,必须仔细选择公差。 - Alexandre C.x
,可以使用x*x/2
代替1-cos(x)
。 - ev-br