Adakah pow(x, 2) atau x * x Lebih Cekap untuk Petak kuasa dua dalam C dan C ?

Barbara Streisand
Lepaskan: 2024-11-11 10:17:03
asal
985 orang telah melayarinya

Is pow(x, 2) or x * x More Efficient for Squaring in C and C  ?

Apakah yang lebih cekap? Menggunakan pow kepada kuasa dua atau hanya darabkannya dengan dirinya sendiri?

Dalam C, menggunakan x * x untuk kuasa dua secara amnya lebih cekap daripada menggunakan pow(x, 2) kerana pow melibatkan panggilan fungsi dengan overhed tambahan .

Walau bagaimanapun, dalam C , kedua-dua pendekatan boleh menjadi cekap disebabkan pengoptimuman pengkompil:

pow(x, 3) lwn. x x x

Dalam C , pow(x, 3) dan x * x * x biasanya setara dari segi kecekapan. Fungsi std::pow C mengambil bentuk yang lebih generik (pow(double, double)), yang mengendalikan eksponen sebagai nombor titik terapung.

Pertimbangan Khusus:

  • Tahap Pengoptimuman: Penyusun boleh mengoptimumkan mana-mana pendekatan.
  • Eksponen: Apabila eksponen semakin besar, std::pow mungkin menjadi lebih cekap disebabkan oleh pelaksanaannya yang dioptimumkan untuk eksponen integer.
  • Jenis Data: Jika anda bekerja dengan eksponen integer dan mengoptimumkan kelajuan, pendaraban secara manual (cth., x * x * x) masih boleh menjadi pilihan yang lebih baik.

Berikut ialah penanda aras yang dikemas kini untuk GCC dan Clang, menguji kecekapan untuk eksponen yang berbeza:

Exponent GCC (O3) Clang (O3)
2 x * x slightly faster Similar
3 x * x * x faster Similar
4 and above x * x * x * ... faster Similar

Nota Tambahan:

  • C's pow(double, double) kurang cekap daripada std::pow dalam C kerana kekurangan fungsi overloading.
  • Menggunakan -ffast-math dalam GCC boleh mempercepatkan std:: pow untuk eksponen ganjil.

Atas ialah kandungan terperinci Adakah pow(x, 2) atau x * x Lebih Cekap untuk Petak kuasa dua dalam C dan C ?. 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