Rumah > pembangunan bahagian belakang > C++ > Mengapakah `std::pow` Memberi Keputusan Tidak Dijangka dengan Matematik Integer?

Mengapakah `std::pow` Memberi Keputusan Tidak Dijangka dengan Matematik Integer?

Barbara Streisand
Lepaskan: 2024-12-03 10:33:11
asal
120 orang telah melayarinya

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

Mengapa Matematik Integer dengan std::pow Menghasilkan Keputusan Yang Tidak Dijangka

Apabila menggunakan std::pow untuk matematik integer, anda mungkin menghadapi output yang tidak dijangka. Dalam senario ini, coretan kod yang bertujuan untuk menetapkan i = 23 1 * 10^2 menghasilkan 122, bukan 123.

Tingkah laku ini berpunca daripada sifat titik terapung std::pow, yang sememangnya kekurangan infiniti ketepatan. Pelaksanaan mungkin memburukkan lagi isu ini melalui pelaksanaan yang tidak cekap.

Pelaksanaan Fungsi Kuasa Integer

Untuk menangani perkara ini, fungsi kuasa integer tersuai boleh ditakrifkan. Dalam C 11 dan kemudian, fungsi constexpr memastikan bahawa hasilnya boleh dikira pada masa penyusunan:

constexpr int int_pow(int b, int e)
{
    return (e == 0) ? 1 : b * int_pow(b, e - 1);
}
Salin selepas log masuk

Variasi Rekursif Ekor

Borang rekursif ekor alternatif, dikaitkan dengan Dan Nissenbaum, membolehkan pengiraan yang lebih cekap:

constexpr int int_pow(int b, int e, int res = 1)
{
    return (e == 0) ? res : int_pow(b, e - 1, b * res);
}
Salin selepas log masuk

Alternatif ini memberikan yang tepat pengiraan kuasa integer, menyelesaikan isu yang dihadapi dengan std::pow.

Atas ialah kandungan terperinci Mengapakah `std::pow` Memberi Keputusan Tidak Dijangka dengan Matematik Integer?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan