Rumah >pembangunan bahagian belakang >C++ >Mengapa Pendaraban Selalunya Lebih Cepat Daripada Pembahagian dalam Operasi Titik Terapung?
Mengenai operasi titik terapung, pemproses mempunyai prestasi tidak simetri. Walaupun pendaraban selalunya mengambil masa beberapa kitaran jam, pembahagian boleh mengambil masa yang lebih lama. Percanggahan ini boleh memberi kesan kepada kecekapan kod, seperti yang digambarkan oleh contoh yang disediakan:
float f1 = 200f / 2; float f2 = 200f * 0.5;
Dalam banyak kes, pendaraban dengan 0.5 akan menjadi lebih cepat sedikit daripada membahagikan dengan 2. Perbezaan ini timbul disebabkan oleh kerumitan pembahagian dalam perkakasan .
Pembahagian memerlukan proses berulang penolakan, sama seperti pembahagian panjang di sekolah rendah. Sebaliknya, pendaraban boleh dilakukan sebahagian besarnya dengan penambahan serentak, menjadikannya operasi yang lebih pantas.
Untuk memperbaiki penalti prestasi pembahagian, sesetengah CPU menggunakan anggaran timbal balik untuk mempercepatkan proses. Walaupun kaedah ini tidak setepat pembahagian sebenar, ia boleh meningkatkan kelajuan dengan ketara.
Perbezaan prestasi menjadi lebih ketara dalam gelung berikut:
float f1; float f2 = 2; float f3 = 3; for (i = 0; i < 1e8; i++) { f1 = (i * f2 + i / f3) * 0.5; // or divide by 2.0f, respectively }
Di sini, operasi bahagi dalam gelung akan menyumbang overhed yang ketara, menjadikan penggunaan pendaraban dengan 0.5 lebih baik untuk kecekapan.
Memahami had perkakasan pembahagian titik terapung boleh membantu pengaturcara mengoptimumkan prestasi kod. Dalam kebanyakan kes, menggunakan pendaraban dengan nilai malar boleh menjadi lebih pantas daripada pembahagian langsung, terutamanya dalam gelung.
Atas ialah kandungan terperinci Mengapa Pendaraban Selalunya Lebih Cepat Daripada Pembahagian dalam Operasi Titik Terapung?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!