Memaksa Pengiraan Titik Terapung untuk Keputusan Deterministik dalam .NET
Didorong oleh mengejar hasil yang konsisten merentas mesin dalam .NET, pembangun bergelut dengan cabaran penentuan titik terapung. Tanpa penyelesaian terbina dalam seperti fpstrict Java, isu itu nampaknya tidak dapat diatasi. Walaupun sesetengah telah menggunakan matematik titik tetap yang menyusahkan, yang lain telah meneroka potensi tuangan eksplisit.
Seperti yang dicadangkan oleh jurutera CLR David Notario, memasukkan hantaran eksplisit selepas setiap operasi titik terapung mungkin membawa kepada tingkah laku yang boleh diramal. Walau bagaimanapun, Eric Lippert memberi amaran bahawa pengkompil C# hanya memberikan "petunjuk" kepada masa jalan untuk membolehkan penyempitan. Masih tidak jelas sama ada pembayang ini diterjemahkan ke dalam penukaran IL yang diperlukan.
Menyelidiki spesifikasi C# dan spesifikasi CLR, kami mengesahkan bahawa:
Walaupun begitu, pemutus eksplisit sahaja tidak mencukupi untuk menjamin kebolehulangan merentas mesin. CLR berpotensi membenarkan keputusan disimpan dalam daftar FPU ketepatan yang lebih tinggi semasa pengiraan pertengahan. Menugaskan kepada medan statik atau elemen tatasusunan juga boleh memaksa pemangkasan.
Faktor lain, seperti tetapan FPU, masih boleh memperkenalkan variasi. Untuk memastikan aritmetik yang benar-benar boleh dihasilkan semula, pembangun dinasihatkan untuk mempertimbangkan untuk menggunakan integer sebaliknya.
Atas ialah kandungan terperinci Bagaimanakah Kami Boleh Mencapai Keputusan Titik Terapung Deterministik dalam .NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!