首頁 >後端開發 >C++ >為什麼「std::pow」使用整數數學會給出意外的結果?

為什麼「std::pow」使用整數數學會給出意外的結果?

Barbara Streisand
Barbara Streisand原創
2024-12-03 10:33:11119瀏覽

Why Does `std::pow` Give Unexpected Results with Integer Math?

為什麼使用std::pow 進行整數數學運算會產生意外的結果

使用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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn