/fpcvt
(Kompatibilitas konversi floating-point ke bilangan bulat)
Menentukan bagaimana pengkompilasi memperlakukan konversi floating-point ke jenis bilangan bulat.
Sintaks
/fpcvt:IA
/fpcvt:BC
Argumen
/fpcvt:IA
Opsi ini /fpcvt:IA
memberi tahu pengkompilasi untuk mengonversi nilai floating point menjadi bilangan bulat sehingga hasilnya kompatibel dengan instruksi konversi Intel AVX-512. Perilaku ini adalah perilaku biasa di Visual Studio 2019 untuk target x86.
/fpcvt:BC
Opsi ini /fpcvt:BC
memberi tahu pengkompilasi untuk mengonversi nilai floating point ke bilangan bulat yang tidak ditandatangani sehingga hasilnya kompatibel dengan Visual Studio 2017 dan kompilator sebelumnya. Perilaku ini adalah default di Visual Studio 2022.
Keterangan
Di Visual Studio 2019 versi 16.8 dan versi yang lebih baru, /fpcvt
opsi pengkompilasi dapat digunakan untuk mengontrol hasil konversi floating-point ke bilangan bulat. Opsi /fpcvt:BC
menentukan perilaku default Visual Studio 2022, yang sama dengan perilaku Visual Studio 2017 dan versi sebelumnya. Opsi menentukan /fpcvt:IA
perilaku yang kompatibel dengan perilaku instruksi konversi Intel Architecture (IA) AVX-512. Opsi ini dapat digunakan dengan target x86 32-bit atau 64-bit x64, dan berlaku apakah /arch:AVX512
ditentukan atau tidak.
Untuk Visual Studio 2019, perilaku default untuk target x64 konsisten dengan /fpcvt:BC
kecuali /arch:AVX512
ditentukan. Biasanya, perilaku untuk target x86 konsisten dengan /fpcvt:IA
, kecuali di bawah /arch:IA32
, /arch:SSE
, atau kadang-kadang di mana hasil panggilan fungsi langsung dikonversi ke bilangan bulat yang tidak ditandatangani. Penggunaan /fpcvt
mengambil alih default, sehingga semua konversi ditangani secara konsisten pada salah satu target. Perilaku konversi untuk target ARM dan ARM64 tidak konsisten dengan /fpcvt:BC
atau /fpcvt:IA
.
C++ standar menentukan bahwa jika nilai floating-point yang dipotong sama persis dapat direpresentasikan dalam jenis bilangan bulat, nilai tersebut harus memiliki nilai tersebut saat dikonversi ke jenis tersebut. Jika tidak, perilaku apa pun sama sekali diizinkan. Kedua /fpcvt
opsi sesuai dengan Standard C++. Satu-satunya perbedaan adalah dalam nilai apa yang dikembalikan untuk nilai sumber yang tidak valid.
Opsi /fpcvt:IA
ini menyebabkan konversi yang tidak valid mengembalikan nilai sentinel tunggal, yang merupakan nilai tujuan terjauh dari nol. Untuk konversi ke jenis yang ditandatangani, sentinel adalah nilai minimum untuk jenis tersebut. Jenis yang tidak ditandatangani menggunakan nilai maksimum. Operasi floating-point dapat mengembalikan nilai Not-a-Number (NaN) untuk menunjukkan operasi yang tidak valid. Indikator tersebut bukan opsi untuk konversi ke jenis bilangan bulat, yang tidak memiliki nilai NaN. Sentinel digunakan sebagai proksi untuk nilai NaN, meskipun juga dapat menjadi hasil dari konversi yang valid.
Opsi ini /fpcvt:BC
juga membuat konversi ke jenis yang ditandatangani mengembalikan nilai minimum yang mungkin ketika sumber tidak valid. Namun, konversi ke jenis bilangan bulat yang tidak ditandatangani didasarkan pada konversi ke long long
. Untuk mengonversi nilai menjadi unsigned int
, pengkompilasi terlebih dahulu mengonversinya menjadi jenis long long
. Pengkompilasi kemudian memotong hasilnya menjadi 32 bit. Untuk mengonversi nilai menjadi unsigned long long
, nilai sumber valid yang terlalu tinggi untuk long long
ditangani sebagai kasus khusus. Semua nilai lain pertama kali dikonversi ke long long
lalu disiarkan ulang ke unsigned long long
.
Opsi ini /fpcvt
baru di Visual Studio 2019 versi 16.8. Jika Anda menentukan lebih dari satu /fpcvt
opsi pada baris perintah, opsi yang lebih baru lebih diutamakan dan pengkompilasi menghasilkan peringatan.
Fungsi intrinsik untuk konversi
Anda dapat menentukan perilaku konversi tertentu secara independen dari /fpcvt
opsi, yang berlaku secara global. Pengkompilasi menyediakan fungsi konversi sentinel intrinsik untuk konversi yang kompatibel dengan /fpcvt:IA
. Untuk informasi selengkapnya, lihat Fungsi konversi Sentinel. Pengkompilasi juga menyediakan fungsi konversi saturasi yang kompatibel dengan konversi pada arsitektur target ARM atau ARM64. Untuk informasi selengkapnya, lihat Fungsi konversi saturasi.
Kompilator juga mendukung fungsi konversi intrinsik yang dijalankan secepat mungkin untuk konversi yang valid. Fungsi-fungsi ini dapat menghasilkan nilai apa pun atau melempar pengecualian untuk konversi yang tidak valid. Hasilnya bergantung pada platform target, opsi pengkompilasi, dan konteks. Nilai tersebut berguna untuk menangani nilai yang telah diperiksa rentangnya, atau nilai yang dihasilkan dengan cara yang tidak dapat menyebabkan konversi yang tidak valid. Untuk informasi selengkapnya, lihat Fungsi konversi cepat.
Untuk mengatur opsi pengkompilasi ini di lingkungan pengembangan Visual Studio
Buka kotak dialog Halaman Properti proyek. Untuk detailnya, lihat Mengatur pengkompilasi C++ dan membuat properti di Visual Studio.
Pilih halaman properti Properti>Konfigurasi C/C++>Baris Perintah.
Ubah properti Opsi Tambahan untuk menambahkan
/fpcvt:IA
atau/fpcvt:BC
. Pilih OK untuk menyimpan perubahan.
Untuk mengatur opsi pengkompilasi ini secara terprogram
- Lihat AdditionalOptions.
Lihat juga
Opsi pengkompilasi MSVC
Sintaks baris perintah pengkompilasi MSVC
Fungsi konversi cepat
Fungsi konversi saturasi
Fungsi konversi Sentinel