fegetround
, fesetround
Mendapatkan atau mengatur mode pembulatan titik mengambang saat ini.
Sintaks
int fegetround(void);
int fesetround(int round_mode);
Parameter
round_mode
Mode pembulatan untuk diatur, sebagai salah satu makro pembulatan floating-point. Jika nilai tidak sama dengan salah satu makro pembulatan floating-point, mode pembulatan tidak diubah.
Nilai hasil
Setelah berhasil, fegetround
mengembalikan mode pembulatan sebagai salah satu nilai makro pembulatan titik mengambang. Ini mengembalikan nilai negatif jika mode pembulatan saat ini tidak dapat ditentukan.
Pada keberhasilan, fesetround
mengembalikan 0. Jika tidak, nilai bukan nol dikembalikan.
Keterangan
Operasi floating-point dapat menggunakan salah satu dari beberapa mode pembulatan. Mode-mode ini mengontrol arah mana hasil operasi floating-point dibulatkan ke arah ketika hasil disimpan. Berikut adalah nama dan perilaku makro pembulatan floating-point yang ditentukan dalam <fenv.h>:
Makro | Deskripsi |
---|---|
FE_DOWNWARD |
Bulat menuju tak terbatas negatif. |
FE_TONEAREST |
Bulatkan ke arah terdekat. |
FE_TOWARDZERO |
Bulat menuju nol. |
FE_UPWARD |
Bulat menuju tak terbatas positif. |
Perilaku FE_TONEAREST
default adalah membulatkan hasil di tengah jalan antara nilai yang dapat diwakili menuju nilai terdekat dengan bit yang bahkan (0) paling tidak signifikan.
Mode pembulatan saat ini memengaruhi operasi ini:
- Konversi string.
- Hasil operator aritmatika floating-point di luar ekspresi konstanta.
- Fungsi pembulatan pustaka, seperti
rint
dannearbyint
. - Mengembalikan nilai dari fungsi matematika pustaka standar.
Mode pembulatan saat ini tidak memengaruhi operasi ini:
- Fungsi
trunc
pustaka ,ceil
,floor
, danlround
. - Floating-point ke integer implisit cast dan konversi, yang selalu membulatkan ke nol.
- Hasil operator aritmetika floating-point dalam ekspresi konstanta, yang selalu membulatkan ke nilai terdekat.
Untuk menggunakan fungsi-fungsi ini, Anda harus menonaktifkan pengoptimalan floating-point yang dapat mencegah akses dengan menggunakan arahan #pragma fenv_access(on)
sebelum panggilan. Untuk informasi selengkapnya, lihat fenv_access
.
Penting
Sebelum Windows 10 versi 14393, fenv.h
ditentukan FE_UPWARD = 0x0100
dan FE_DOWNWARD = 0x0200
. Di Windows versi 14393, header ini diperbarui untuk mengatasi bug di mana beberapa API akan menafsirkan FE_UPWARD
sebagai FE_DOWNWARD
, dan sebaliknya. Mulai windows versi 14393, FE_UPWARD = 0x0200
dan FE_DOWNWARD = 0x0100
, mengembalikan nilai sebelumnya.
Jika Anda mengkompilasi aplikasi terhadap versi Windows SDK lama (masalah ini bergantung pada versi SDK, bukan versi OS atau versi VS), Anda mungkin mengalami masalah ini. Perbarui aplikasi Anda untuk menargetkan Windows SDK terbaru sehingga definisi FE_UPWARD
dan FE_DOWNWARD
konsisten dengan implementasi Windows. Jika Anda tidak dapat memperbarui aplikasi untuk menargetkan Windows SDK nanti, Anda dapat menentukan FE_UPWARD
sebagai 0x0100
dan FE_DOWNWARD
sebagai 0x0200
dalam kode Anda.
Persyaratan
Fungsi | Header C | Header C++ |
---|---|---|
fegetround , fesetround |
<fenv.h> |
<cfenv> |
Untuk informasi selengkapnya, lihat Kompatibilitas.
Lihat juga
Referensi fungsi alfabet
nearbyint
, , nearbyintf
nearbyintl
rint
, , rintf
rintl
lrint
, , lrintf
lrintl
, llrint
, , llrintf
,llrintl