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:
Pertimbangan Selanjutnya:
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!