Rumah >pembangunan bahagian belakang >C++ >Mengapa Percanggahan Pembundaran Titik Terapung Berlaku Semasa Pengoptimuman?

Mengapa Percanggahan Pembundaran Titik Terapung Berlaku Semasa Pengoptimuman?

Linda Hamilton
Linda Hamiltonasal
2024-11-12 21:51:01442semak imbas

Why Do Floating-Point Rounding Discrepancies Occur During Optimization?

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!

Kenyataan:
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