Konverter Floating-Point IEEE 754
Konversi float desimal ke biner dan hex IEEE 754 — presisi setengah, tunggal, ganda, dan bfloat16. Lihat nilai tersimpan eksak, error pembulatan, dan layout bit. 100% di browser Anda.
| Tanda | |
| Eksponen | |
| Mantisa |
- Anda memasukkan
- Benar-benar tersimpan
- Error pembulatan
- Sebelumnya
- Berikutnya
- ULP (ukuran jarak)
| Format | Total bit | Tanda | Eksponen | Mantisa | Bias | Nilai berhingga maksimum | Digit desimal |
|---|---|---|---|---|---|---|---|
| binary16 (FP16) | 16 | 1 | 5 | 10 | 15 | 65504 | ~3.3 |
| bfloat16 | 16 | 1 | 8 | 7 | 127 | ≈3.39×10³⁸ | ~2.3 |
| binary32 (FP32) | 32 | 1 | 8 | 23 | 127 | ≈3.40×10³⁸ | ~7.2 |
| binary64 (FP64) | 64 | 1 | 11 | 52 | 1023 | ≈1.80×10³⁰⁸ | ~15.9 |
Apa Itu Floating Point IEEE 754?
IEEE 754 adalah standar yang mendefinisikan bagaimana komputer menyimpan bilangan real dalam biner. Setiap nilai dikemas ke dalam tiga field: bit tanda, eksponen (disimpan dengan bias sehingga dapat merepresentasikan magnitudo besar maupun sangat kecil), dan mantisa yang memuat digit signifikan. Hampir semua CPU, GPU, dan bahasa pemrograman menggunakannya, itulah sebabnya kejutan pembulatan yang sama muncul di JavaScript, Python, C, maupun SQL.
Wawasan kuncinya adalah floating point biner hanya dapat merepresentasikan bilangan berbentuk m × 2ⁿ. Pecahan desimal seperti 0.1 adalah pecahan berulang tak berhingga dalam basis 2 — 0.000110011001100… — sehingga format ini menyimpan tetangga terdekat yang dapat direpresentasikan sebagai gantinya. Dalam presisi tunggal tetangga itu adalah 0.100000001490116119384765625; dalam presisi ganda 0.1000000000000000055511151231257827021181583404541015625. Tidak satu pun sama dengan 0.1. Setiap keanehan turunannya — 0.1 + 0.2 ≠ 0.3, penjumlahan yang melenceng, pemeriksaan kesamaan yang gagal — berpangkal dari satu fakta ini, dan konverter ini membuatnya terlihat dengan mencetak nilai tersimpan eksak alih-alih aproksimasi yang dibulatkan kembali.
Standar ini juga mencadangkan pola bit untuk nilai-nilai khusus. Eksponen yang seluruhnya berisi 1 mengkodekan ±Infinity (mantisa nol) atau NaN (mantisa bukan nol); eksponen yang seluruhnya nol mengkodekan nol bertanda (mantisa nol) atau bilangan subnormal (mantisa bukan nol), yang mengisi celah underflow di dekat nol dengan presisi berkurang. Keempat format yang dicakup alat ini — binary16/FP16, bfloat16, binary32/FP32, binary64/FP64 — hanya berbeda pada berapa banyak bit yang diberikan ke setiap field: lebih banyak bit eksponen berarti rentang lebih luas, lebih banyak bit mantisa berarti presisi lebih tinggi. bfloat16, favorit machine-learning, sekadar FP32 dengan 16 bit mantisa terbawah dipotong: rentang sama, presisi jauh lebih kasar.
Model mental yang berguna: float yang dapat direpresentasikan membentuk kisi pada garis bilangan yang jaraknya — satu unit di posisi terakhir, atau ULP — berlipat ganda pada setiap pangkat dua. Di dekat 1.0 jarak kisi sebuah double sekitar 2.22 × 10⁻¹⁶; di dekat 2⁵³ jaraknya satu bilangan bulat penuh, itulah sebabnya double tidak dapat menghitung melewati 2⁵³ secara andal. Panel tetangga di alat ini menampilkan kisi tersebut secara langsung: nilai yang dapat direpresentasikan sebelum dan sesudah apa pun yang Anda ketik, beserta jarak eksak di antara keduanya.
// Float ↔ hex through the raw IEEE 754 bits (works in any browser / Node.js)
const buf = new DataView(new ArrayBuffer(8));
function floatToHex32(value) {
buf.setFloat32(0, value); // rounds to nearest even
return '0x' + buf.getUint32(0).toString(16).toUpperCase().padStart(8, '0');
}
function hexToFloat32(hex) {
buf.setUint32(0, parseInt(hex, 16));
return buf.getFloat32(0);
}
floatToHex32(0.1); // '0x3DCCCCCD'
floatToHex32(3.14159); // '0x40490FD0'
hexToFloat32('3DCCCCCD'); // 0.10000000149011612 Fitur Utama
Empat format, satu tampilan
Half (FP16), bfloat16, Single (FP32), dan Double (FP64) — beralih dengan satu klik dan seluruh halaman dihitung ulang, sehingga membandingkan bagaimana angka yang sama mendarat di tiap format hanya butuh hitungan detik.
Kisi bit yang dapat diklik
Setiap bit adalah tombol. Balik bit tanda, geser eksponen, atau sentuh satu bit mantisa dan lihat tampilan desimal, hex, dan biner diperbarui secara instan — cara tercepat membangun intuisi tentang encoding ini.
Nilai tersimpan eksak, bukan aproksimasi
Alat ini menghitung ekspansi desimal penuh dari bit yang tersimpan dengan aritmatika big-integer eksak — seluruh 55 digit untuk 0.1 pada double — plus error pembulatan bertanda eksak terhadap apa yang Anda ketik.
Tetangga dan ULP
Lihat nilai yang dapat direpresentasikan sebelum dan sesudah angka saat ini serta jarak eksak (ULP) di antara keduanya — jarak kisi yang menentukan seberapa besar presisi yang benar-benar Anda miliki pada magnitudo mana pun.
Nilai khusus, sekali klik
Chip memuat ±0, ±Infinity, NaN, subnormal terkecil, dan nilai berhingga terbesar dari format terpilih, dengan badge klasifikasi yang menamai apa yang dikodekan pola bit saat ini.
Permalink yang dapat dibagikan, nol upload
Salin tautan mengkodekan format dan pola bit persis ke dalam URL — ideal untuk laporan bug, code review, dan pengajaran. Semuanya berjalan di browser Anda; tidak ada yang Anda ketik meninggalkan halaman ini.
Contoh Konversi IEEE 754
0.1 dalam presisi tunggal — error pembulatan klasik
0.1
0x3DCCCCCD — sebenarnya tersimpan sebagai 0.100000001490116119384765625
Desimal 0.1 tidak memiliki representasi biner berhingga, sehingga IEEE 754 menyimpan nilai terdekat yang dapat direpresentasikan sebagai gantinya. Dalam presisi tunggal (FP32) nilainya adalah 0x3DCCCCCD, yang tepat sama dengan 0.100000001490116119384765625 — sekitar 1.49 × 10⁻⁹ lebih besar. Alat ini menampilkan nilai tersimpan eksak tersebut beserta error eksaknya, digit demi digit, bukan '0.1' yang dibulatkan kembali oleh bahasa pemrograman Anda. Satu contoh ini menjelaskan sebagian besar kejutan floating-point, termasuk mengapa 0.1 + 0.2 tidak sama dengan 0.3.
Float ke hex: 3.14159 dalam FP32
3.14159
0x40490FD0
Ketik 3.14159 dengan Single (FP32) terpilih dan kolom hex menampilkan 0x40490FD0 — tanda 0, eksponen ber-bias 128 (jadi 2¹), mantisa 0x490FD0. Nilai yang benar-benar tersimpan adalah 3.141590118408203125, sedikit di atas apa yang Anda ketik. Bentuk hex adalah apa yang Anda lihat di network dump, buffer GPU, tampilan register, dan file biner terserialisasi, dan konversinya bekerja dua arah: tempelkan 40490FD0 ke kolom hex untuk mendekodekannya kembali.
Maksimum FP16: 65504 adalah batas akhir presisi setengah
65504
0x7BFF — nilai FP16 berhingga terbesar
Presisi setengah hanya memiliki 5 bit eksponen dan 10 bit mantisa, sehingga nilai berhingga terbesarnya adalah 65504 (0x7BFF). Ketik 65520 atau apa pun yang lebih besar dan hasilnya dibulatkan ke Infinity (0x7C00) — bahaya nyata saat mengkuantisasi model machine-learning ke FP16. Beralihlah ke bfloat16 dan angka 65520 yang sama muat dengan mudah, karena bfloat16 mempertahankan 8 bit eksponen FP32 (rentang) sambil mengorbankan bit mantisa (presisi). Trade-off itulah tepatnya alasan pelatihan ML memilih bfloat16 sementara penyimpanan ringkas memilih FP16.
−0 dan +0: dua pola bit berbeda, satu nilai
-0
0x80000000 (FP32), sedangkan +0 adalah 0x00000000
IEEE 754 memiliki nol bertanda: −0 hanya menyalakan bit tanda (0x80000000 dalam FP32), sedangkan +0 seluruhnya nol. Keduanya dianggap sama dalam perbandingan di setiap bahasa, namun 1/−0 adalah −Infinity dan 1/+0 adalah +Infinity, sehingga perbedaannya dapat diamati. Klik bit tanda di alat ini untuk berpindah di antara keduanya dan lihat badge klasifikasi tetap pada Nol sementara hex-nya berubah — ilustrasi satu-klik mengapa kesamaan tingkat bit dan kesamaan numerik adalah dua hal yang berbeda.
Cara Mengonversi Bilangan Floating-Point IEEE 754
- 1
Pilih format floating-point
Single (FP32) terpilih sejak awal. Beralihlah ke Double (FP64) untuk angka gaya JavaScript/Python, atau Half (FP16) dan bfloat16 untuk format 16-bit yang digunakan dalam machine learning dan grafis.
- 2
Ketik angka desimal
Masukkan nilai apa pun — 0.1, -2.5e3, 65504 — atau gunakan chip nilai khusus untuk ±0, ±Infinity, NaN, subnormal terkecil, dan nilai berhingga terbesar. Konversi terjadi saat Anda mengetik.
- 3
Baca layout bit berkode warna
Bit tanda, field eksponen, dan mantisa disorot dengan warna berbeda, dengan tabel rincian field yang menampilkan bit mentah, aritmatika bias, dan bit implisit di depan.
- 4
Periksa nilai tersimpan eksak dan errornya
Panel akurasi mencetak nilai yang benar-benar tersimpan — setiap digit, dihitung secara eksak — berdampingan dengan error pembulatan terhadap apa yang Anda ketik, plus tetangga yang dapat direpresentasikan sebelum dan sesudahnya beserta jarak ULP.
- 5
Balik bit, tempel hex, salin hasil
Klik bit mana pun untuk membaliknya, atau tempelkan string hex (3DCCCCCD) dan biner untuk mendekodekannya kembali ke desimal. Salin hex, biner, nilai eksak, atau tautan yang dapat dibagikan yang mereproduksi pola bit persis.
Kesalahan Floating-Point yang Umum
Memercayai nilai yang dicetak alih-alih nilai yang tersimpan
Bahasa pemrograman mencetak float yang dibulatkan ke string terpendek yang dapat round-trip, sehingga 0.1 terlihat bersih padahal nilai tersimpannya tidak. Nilailah presisi dari ekspansi eksaknya, bukan dari apa yang ditampilkan print().
print(0.1) # 0.1 — tampak eksak, padahal tidak
0.1 tersimpan (FP64) = 0.1000000000000000055511151231257827021181583404541015625
Membandingkan float untuk kesamaan eksak
0.1 + 0.2 mendarat pada pola bit 0x3FD3333333333334 sedangkan literal 0.3 adalah 0x3FD3333333333333 — berjarak satu ULP, sehingga == bernilai false meskipun keduanya dicetak sebagai nilai yang tampak seperti 0.3.
if (0.1 + 0.2 === 0.3) { … } // tidak pernah berjalan if (Math.abs(a - b) < 1e-9) { … } // toleransi disesuaikan dengan data Anda Mengkuantisasi ke FP16 tanpa memeriksa rentang
Nilai berhingga terbesar FP16 adalah 65504. Apa pun yang lebih besar menjadi Infinity, dan begitu satu Infinity masuk ke komputasi, ia menyebar. Periksa nilai maksimum Anda sebelum melakukan cast ke bawah — atau gunakan bfloat16, yang mempertahankan rentang FP32.
fp16(65520) → Infinity (0x7C00) — overflow diam-diam
bf16(65520) → berhingga (bfloat16 mempertahankan 8 bit eksponen)
Menguji NaN dengan kesamaan
NaN adalah satu-satunya nilai yang tidak sama dengan dirinya sendiri — itu memang disengaja, agar komputasi yang gagal tidak dapat menyamar sebagai bilangan sungguhan. Gunakan pemeriksaan isNaN milik bahasa Anda alih-alih ==, dan ingat ada jutaan pola bit NaN yang berbeda.
if (x === NaN) { … } // selalu false, bahkan saat x memang NaN if (Number.isNaN(x)) { … } // pengujian yang benar Apa yang Dapat Anda Lakukan dengan Konverter IEEE 754
- Debug data biner terserialisasi
- Tempelkan hex yang Anda temukan di tangkapan jaringan, buffer GPU, dump register, atau format file dan dekodekan ke nilai desimal eksaknya — atau sebaliknya untuk menulis fixture pengujian. Catatan urutan byte: hex yang ditampilkan adalah pola bit big-endian; jika dump Anda little-endian, balikkan urutan byte sebelum menempelkannya.
- Memahami kuantisasi ML
- Periksa apakah nilai Anda selamat dari plafon 65504 milik FP16, bandingkan kehilangan presisi FP16 dengan bfloat16 digit demi digit, dan periksa rentang subnormal tempat gradien mengalami underflow.
- Menjelaskan bug floating-point
- Ketika rekan kerja bertanya mengapa dua angka yang 'sama' ternyata berbeda, kirimkan permalink yang menampilkan kedua pola bit dan nilai tersimpan eksaknya — perdebatan selesai dengan sendirinya. Padukan dengan alat text diff untuk dump yang lebih panjang.
- Belajar atau mengajarkan encoding ini
- Materi kuliah arsitektur komputer menjadi konkret ketika mahasiswa dapat mengklik bit eksponen dan melihat aritmatika bias diperbarui. Tabel rincian field mencerminkan cara buku teks menggambar format ini.
- Mendekodekan register embedded dan industri
- Payload Modbus, CAN, dan sensor rutin membawa nilai FP32 sebagai word hex mentah. Tempelkan word tersebut di sini untuk membaca nilai fisiknya tanpa menulis skrip sekali pakai.
Format & Nilai Khusus IEEE 754
- Empat format biner dalam sekilas
- binary16 (FP16): 1 bit tanda + 5 eksponen + 10 mantisa, bias 15, maks 65504, ~3.3 digit desimal. bfloat16: 1 + 8 + 7, bias 127, maks ≈ 3.39 × 10³⁸, ~2.3 digit. binary32 (FP32): 1 + 8 + 23, bias 127, maks ≈ 3.40 × 10³⁸, ~7.2 digit. binary64 (FP64): 1 + 11 + 52, bias 1023, maks ≈ 1.80 × 10³⁰⁸, ~15.9 digit. Polanya: bit eksponen membeli rentang, bit mantisa membeli presisi, dan bfloat16 sengaja menukar seluruh presisinya demi rentang FP32.
- Bagaimana sebuah nilai dirakit
- Bilangan normal didekodekan sebagai (−1)^tanda × 1.mantisa × 2^(eksponen − bias). Angka 1 di depan bersifat implisit — tidak disimpan, itulah sebabnya field mantisa 23-bit memberikan presisi 24 bit. Eksponen yang tersimpan adalah eksponen sebenarnya ditambah bias (127 pada FP32), sehingga 2⁰ disimpan sebagai 01111111. Tabel rincian field di alat ini menampilkan setiap langkah aritmatika tersebut untuk nilai saat ini.
- Nilai khusus: pola eksponen yang dicadangkan
- Eksponen seluruhnya 1 dengan mantisa nol adalah ±Infinity; dengan mantisa bukan nol adalah NaN (quiet NaN kanonis menyalakan bit teratas mantisa). Eksponen seluruhnya nol dengan mantisa nol adalah ±0; dengan mantisa bukan nol adalah subnormal, didekodekan sebagai 0.mantisa × 2^(1 − bias) — tanpa angka 1 implisit di depan. Aturan ini identik di keempat format, itulah sebabnya chip yang sama bekerja di masing-masingnya.
- Pembulatan: ke terdekat, seri ke genap
- Ketika sebuah nilai jatuh di antara dua bilangan yang dapat direpresentasikan, mode default IEEE 754 membulatkan ke yang lebih dekat; pada seri persis di tengah, dipilih yang bit mantisa terakhirnya 0 (ties to even), yang mencegah penyimpangan sistematis. Konverter ini menerapkan persis aturan itu saat mempersempit input desimal Anda ke format target, dan panel error menampilkan selisih bertanda yang dihasilkan secara eksak.
- ULP: jarak kisi float
- Float yang dapat direpresentasikan tidak tersebar merata — jarak antar tetangga (satu unit di posisi terakhir) berlipat ganda pada setiap pangkat dua. Di dekat 1.0 ULP sebuah double adalah 2⁻⁵² ≈ 2.22 × 10⁻¹⁶; di dekat 2⁵³ ULP mencapai 1.0 dan bilangan bulat mulai terlewati. Panel tetangga mencetak ULP saat ini secara eksak — jawaban jujur untuk 'seberapa presisi angka saya di sini?'.
Praktik Terbaik Floating-Point
- Jangan pernah membandingkan float dengan ==
- Setelah aritmatika apa pun, dua ekspresi yang secara matematis sama bisa berjarak satu ULP. Bandingkan terhadap toleransi yang sesuai dengan magnitudo Anda — atau hitung ULP di antara pola bit, yang dapat Anda periksa langsung di alat ini.
- Jauhkan uang dari float biner
- Tidak ada kisi pangkat-dua yang memuat 0.10 secara eksak, sehingga mata uang dalam float menumpuk error yang kasat mata. Gunakan integer sen atau tipe desimal; panel nilai tersimpan eksak di sini adalah bukti tetap alasannya.
- Pilih format 16-bit berdasarkan rentang, bukan kebiasaan
- Jika nilai Anda dapat melampaui 65504 — loss, gradien, lonjakan fisika — FP16 akan overflow ke Infinity sementara bfloat16 tetap melaju. Jika semuanya dinormalisasi ke pita sempit, bit mantisa ekstra FP16 memberikan presisi yang tampak lebih baik.
- Waspadai jebakan pembulatan ganda saat mempersempit
- Mengonversi desimal → double → half dapat mendarat satu ULP dari mengonversi desimal → half secara langsung pada kasus titik-tengah yang langka. Alat ini membulatkan input desimal Anda ke format target dalam satu langkah, sehingga yang Anda lihat adalah jawaban IEEE 754 yang jujur.
- Perkirakan bilangan bulat rusak di atas 2⁵³
- Sebuah double menyimpan setiap bilangan bulat hingga 2⁵³ secara eksak, lalu mulai melompatinya — 2⁵³ + 1 tidak dapat direpresentasikan. Jika Anda menangani ID atau counter mendekati skala itu, gunakan integer 64-bit atau string, dan periksa nilai yang mencurigakan di sini pada tingkat bit.
FAQ Konverter IEEE 754
Mengapa 0.1 + 0.2 tidak sama dengan 0.3?
Apa itu IEEE 754?
Apa perbedaan antara FP16 dan bfloat16?
Apa itu bilangan subnormal (denormal)?
Sebaiknya saya menggunakan float atau double?
Bagaimana cara mengonversi float ke hex secara manual?
Apakah data saya diunggah saat menggunakan konverter ini?
Alat Terkait
Lihat semua alat →Konverter Basis Bilangan — Biner, Hex, Desimal & Oktal
Alat Konversi
Konversi antara biner, hex, desimal, oktal, dan basis apa pun (2-36) secara instan. Presisi BigInt, output siap kode. Gratis, privat — tanpa pendaftaran.
Konverter Warna — HEX, RGB, HSL & OKLCH
Alat Konversi
Konversi HEX ke RGB, HSL, OKLCH, OKLAB, dan CMYK di peramban Anda — salin format apa pun dengan satu klik. Gratis, tanpa daftar, warna Anda tidak pernah meninggalkan halaman.
Konverter HEX ke CMYK
Alat Konversi
Konversi warna HEX ke CMYK di peramban Anda. Aproksimasi naif berbasis sRGB untuk pratinjau cetak. Gratis, tanpa daftar, warna Anda tetap lokal.
Konverter HEX ke HSL
Alat Konversi
Konversi warna hex apa pun ke HSL di peramban Anda — 3 digit, 6 digit, dan 8 digit dengan alpha semuanya didukung. Gratis, instan, tanpa daftar, warna Anda tidak pernah meninggalkan halaman.
Konverter HEX ke OKLCH
Alat Konversi
Konversi HEX ke OKLCH untuk token desain Tailwind v4. Output seragam-perseptual langsung dengan peringatan gamut Display P3. Gratis, hanya di peramban.
Konverter HEX ke RGB
Alat Konversi
Konversi kode warna HEX apa pun ke RGB di peramban Anda — HEX 3 digit, 6 digit, dan 8 digit dengan alpha semuanya didukung. Gratis, instan, tanpa daftar, warna Anda tidak pernah meninggalkan halaman.