Mengapa Pengiraan Titik Terapung Ketepatan Berganda Saya Berubah Dengan Pengoptimuman?

Linda Hamilton
Lepaskan: 2024-11-11 05:51:03
asal
544 orang telah melayarinya

Why Do My Double-Precision Floating Point Calculations Change With Optimization?

Percanggahan Ketepatan Titik Terapung Di Bawah Pengoptimuman: Pepijat Pengkompil?

Pernyataan Masalah:

Dalam kes tertentu, kod menggunakan pengiraan titik terapung mungkin menghasilkan keputusan yang berbeza apabila pengoptimuman didayakan berbanding apabila ia dilumpuhkan. Ini amat diperhatikan dalam kes pembolehubah berganda, di mana pengoptimuman nampaknya mempengaruhi ketepatan pengiraan.

Analisis:

Isu timbul disebabkan oleh pengendalian dalaman nilai titik terapung dalam pemproses Intel x86. Pemproses ini menggunakan ketepatan lanjutan 80-bit secara dalaman, manakala pembolehubah berganda biasanya disimpan dalam daftar 64-bit. Apabila pengoptimuman didayakan, pengkompil boleh mengoptimumkan kod untuk menyimpan nilai titik terapung dalam daftar untuk meningkatkan prestasi. Walau bagaimanapun, pengoptimuman ini boleh membawa kepada ralat pembundaran apabila nilai dipindahkan daripada daftar ketepatan lanjutan 80-bit kepada daftar 64-bit.

Resolusi:

Untuk menyelesaikan isu ini, terdapat beberapa pilihan:

  1. Gunakan Pilihan GCC -float-store: Pilihan ini secara eksplisit mengarahkan pengkompil untuk tidak menyimpan pembolehubah titik terapung dalam daftar, menghalang pembundaran ralat yang disebabkan oleh perbezaan ketepatan.
  2. Gunakan Jenis Data berganda panjang: pembolehubah berganda panjang biasanya lebar 80-bit pada GCC, menghapuskan keperluan untuk penukaran ketepatan antara ketepatan lanjutan dan ketepatan berganda.

Pertimbangan Selanjutnya:

  • Dalam binaan x86_64, pengkompil biasanya menggunakan daftar SSE untuk terapung dan berganda, dengan berkesan menghapuskan isu ketepatan lanjutan.
  • Pilihan pengkompil GCC -mfpmath membenarkan kawalan terperinci ke atas pengendalian ketepatan titik terapung.

Kesimpulan:

Percanggahan yang diperhatikan dalam titik terapung keputusan di bawah pengoptimuman tidak semestinya pepijat pengkompil tetapi lebih kepada hasil pengendalian titik terapung dalaman dalam pemproses Intel x86. Dengan menggunakan penyelesaian yang disediakan, pembangun boleh memastikan bahawa pengiraan titik terapung mereka menghasilkan hasil yang konsisten tanpa mengira tetapan pengoptimuman.

Atas ialah kandungan terperinci Mengapa Pengiraan Titik Terapung Ketepatan Berganda Saya Berubah Dengan Pengoptimuman?. 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