Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Aritmetik Titik Terapung Berbeza Antara Seni Bina x86 dan x64?

Mengapa Aritmetik Titik Terapung Berbeza Antara Seni Bina x86 dan x64?

Patricia Arquette
Patricia Arquetteasal
2024-11-03 10:05:03913semak imbas

Why Does Floating Point Arithmetic Differ Between x86 and x64 Architectures?

Perbezaan dalam Aritmetik Titik Terapung Antara x86 dan x64

Apabila melaksanakan sekeping kod yang sama pada MS VS 2010 untuk kedua-dua seni bina x86 dan x64 (kedua-duanya berjalan pada mesin 64-bit), perbezaan ketara dalam aritmetik titik terapung muncul.

Pertimbangkan coretan kod berikut:

float a = 50.0f;
float b = 65.0f;
float c = 1.3f;
float d = a * c;
bool bLarger1 = d < b;
bool bLarger2 = (a * c) < b;

Dalam binaan x86 dan x64, bLarger1 kekal palsu (d ditetapkan kepada 65.0). Walau bagaimanapun, dalam binaan x64, bLarger2 adalah palsu, manakala dalam binaan x86, ia adalah benar.

Percanggahan timbul daripada ungkapan bLarger2 = (a * c) < b. Kod yang dijana mendedahkan bahawa di bawah x86, penilaian dilakukan dalam unit x87, yang beroperasi pada ketepatan lebih tinggi daripada tunggal (biasanya berketepatan dua kali ganda), manakala di bawah x64, penilaian dilakukan dalam unit x64, yang melaksanakan tunggal tulen. -pengiraan ketepatan.

Untuk memastikan unit 32-bit melakukan pengiraan dalam ketepatan tunggal, perkataan kawalan berikut boleh ditetapkan:

_controlfp(_PC_24, _MCW_PC);

Ini akan menyebabkan kedua-dua boolean ditetapkan kepada false dalam program 32-bit.

Isu asas berpunca daripada perbezaan yang wujud antara unit titik terapung x87 dan SSE. Unit x87 menggunakan arahan yang sama untuk kedua-dua jenis ketepatan tunggal dan berganda, manakala unit SSE menggunakan arahan yang berbeza untuk setiap satu. Akibatnya, pengkompil boleh menggunakan lebih kawalan ke atas ketepatan pengiraan dalam unit SSE.

Secara keseluruhannya, perbezaan antara aritmetik titik terapung x86 dan x64 timbul daripada mod pengendalian unit titik terapung masing-masing. Untuk memastikan tingkah laku yang konsisten, adalah disyorkan untuk meneroka pilihan untuk memujuk pengkompil untuk mengeluarkan arahan SSE walaupun untuk sasaran 32-bit.

Atas ialah kandungan terperinci Mengapa Aritmetik Titik Terapung Berbeza Antara Seni Bina x86 dan x64?. 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