Rumah >pembangunan bahagian belakang >C++ >Mengapa Percanggahan Pembundaran Titik Terapung Berlaku Semasa Pengoptimuman?
Percanggahan Titik Terapung Disebabkan Pengoptimuman: Pepijat Pengkompil atau Ketepatan Intrinsik
Kod yang disediakan, bertujuan untuk membundarkan nilai titik terapung, mempamerkan perbezaan tingkah laku pada penyusun yang berbeza dan tetapan pengoptimuman. Percanggahan ini berpunca daripada percanggahan dalam pengendalian ketepatan titik terapung semasa pengoptimuman.
Pemproses Intel x86 menggunakan ketepatan lanjutan 80-bit secara dalaman, manakala double biasanya jenis data 64-bit. Tahap pengoptimuman mempengaruhi kekerapan nilai titik terapung disimpan dalam ingatan, yang membawa kepada pembundaran daripada ketepatan 80-bit kepada 64-bit.
Untuk mengurangkan perkara ini, pilihan -float-store gcc boleh digunakan untuk mengekalkan hasil titik terapung yang konsisten merentas tahap pengoptimuman. Sebagai alternatif, menggunakan jenis berganda panjang, yang biasanya lebar 80-bit pada gcc, boleh mengelakkan isu pembundaran antara ketepatan 80-bit dan 64-bit.
Mengikut dokumentasi man gcc, -float-store pilihan:
Do not store floating point variables in registers, and inhibit other options that might change whether a floating point value is taken from a register or memory.
Pilihan ini selalunya berguna dalam senario di mana program memerlukan takrifan tepat IEEE terapung titik dan bergantung pada pengiraan perantaraan yang disimpan dalam pembolehubah.
Dalam binaan x86_64, pengkompil secara lalai menggunakan daftar SSE untuk apungan dan berganda, menghapuskan penggunaan ketepatan lanjutan dan mengurangkan isu yang dipersoalkan. Pilihan pengkompil gcc -mfpmath mengawal tingkah laku ini.
Atas ialah kandungan terperinci Mengapa Percanggahan Pembundaran Titik Terapung Berlaku Semasa Pengoptimuman?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!