使用std::pow 進行整數數學運算時,您可能會遇到意外的輸出。在這種情況下,打算設定 i = 23 1 * 10^2 的程式碼片段會得到 122,而不是 123。
這種行為源自於 std::pow 的浮點性質,它本質上缺乏無限精確。低效率的實現可能會加劇這個問題。
為了解決這個問題,可以定義一個自訂整數冪函數。在C 11 及更高版本中,constexpr 函數確保可以在編譯時計算結果:
constexpr int int_pow(int b, int e) { return (e == 0) ? 1 : b * int_pow(b, e - 1); }
另一種尾遞歸形式,歸因於Dan Nissenbaum ,允許更有效率的計算:
constexpr int int_pow(int b, int e, int res = 1) { return (e == 0) ? res : int_pow(b, e - 1, b * res); }
這些替代方案提供精確的整數冪計算,解決了std::pow遇到的問題。
以上是為什麼「std::pow」使用整數數學會給出意外的結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!