我有一些數學(在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'小於某個臨界值。 –