Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Arahan Casting dan Penukaran Eksplisit Memastikan Penentuan Titik Terapung dalam .NET?
Dalam konteks ketepatan titik terapung, .NET telah dikritik kerana tidak menyediakan determinisme, kerana kod dengan input yang sama boleh menghasilkan hasil yang berbeza merentasi mesin. Untuk mengurangkan isu ini, pembangun telah menggunakan matematik titik tetap, tetapi penyelesaian ini menyusahkan.
Satu cadangan yang menarik adalah untuk mencapai determinisme dengan secara eksplisit menghantar setiap nilai titik terapung kepada ketepatan tunggal atau ketepatan dua kali. , menggunakan tuangan seperti (terapung) atau (berganda). Kaedah ini disokong oleh artikel MSDN yang menyatakan bahawa hantaran eksplisit boleh memaksa pemasukan arahan conv.r4 atau conv.r8, dengan itu mengehadkan ketepatan.
Walau bagaimanapun, penegasan lanjut mendakwa bahawa hantaran eksplisit mungkin hanya memberikan "petunjuk " kepada masa larian, mencadangkan bahawa pengkompil dan CLR mesti bekerjasama untuk memastikan determinisme. Untuk menjelaskan perkara ini, mari kita teliti soalan berikut:
1. Eksplisit Cast to Float Sisipan conv.r4 dalam IL:
Walaupun spesifikasi C# tidak memerlukannya secara eksplisit, pengkompil memastikan bahawa hantaran eksplisit ke terapung akan sentiasa memasukkan opcode conv.r4. Tingkah laku ini disahkan oleh ujian unit dalam kes ujian pengkompil.
2. conv.r4 Arahan Dipotong kepada Saiz Asli:
Ya, seperti yang dinyatakan dalam spesifikasi CLR Partition I, Seksyen 12.1.3, arahan conv.r4 memotong nilai titik terapung kepada saiz asalnya.
Pertimbangan Tambahan:
Atas ialah kandungan terperinci Bagaimanakah Arahan Casting dan Penukaran Eksplisit Memastikan Penentuan Titik Terapung dalam .NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!