IEEE 754 Kayan Nokta Dönüştürücü
Ondalık float değerleri IEEE 754 binary ve hex biçimine çevrimiçi dönüştürün — yarım, tek, çift duyarlık ve bfloat16. Saklanan tam değeri, yuvarlama hatasını ve bit düzenini görün. %100 tarayıcınızda çalışır.
| İşaret | |
| Üs | |
| Mantis |
- Girdiğiniz
- Gerçekte saklanan
- Yuvarlama hatası
- Önceki
- Sonraki
- ULP (aralık boyutu)
| Biçim | Toplam bit sayısı | İşaret | Üs | Mantis | Sapma | Maks sonlu değer | Ondalık hane |
|---|---|---|---|---|---|---|---|
| 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 |
IEEE 754 Kayan Nokta Nedir?
IEEE 754, bilgisayarların gerçek sayıları binary olarak nasıl sakladığını tanımlayan standarttır. Her değer üç alana paketlenir: bir işaret biti, bir üs (hem büyük hem küçücük büyüklükleri temsil edebilmesi için bir sapma değeriyle saklanır) ve anlamlı haneleri tutan bir mantis. Neredeyse her CPU, GPU ve programlama dili bu standardı kullanır; aynı yuvarlama sürprizlerinin JavaScript, Python, C ve SQL'de aynı şekilde ortaya çıkmasının nedeni budur.
Kilit nokta, binary kayan noktanın yalnızca m × 2ⁿ biçimindeki sayıları temsil edebilmesidir. 0.1 gibi ondalık kesirler 2 tabanında sonsuz devirli kesirlerdir — 0.000110011001100… — bu yüzden biçim, onun yerine en yakın temsil edilebilir komşuyu saklar. Tek duyarlıkta bu komşu 0.100000001490116119384765625'tir; çift duyarlıkta ise 0.1000000000000000055511151231257827021181583404541015625. İkisi de 0.1 değildir. Sonrasında yaşanan her tuhaflık — 0.1 + 0.2 ≠ 0.3, kayan toplamlar, başarısız eşitlik kontrolleri — bu tek gerçekten kaynaklanır ve bu dönüştürücü, geriye yuvarlanmış bir yaklaşıklık yerine saklanan tam değeri yazdırarak bunu görünür kılar.
Standart, özel değerler için de bit desenleri ayırır. Tamamı bir olan üs, ±Infinity (mantis sıfır) veya NaN (mantis sıfırdan farklı) kodlar; tamamı sıfır olan üs ise işaretli sıfır (mantis sıfır) veya sıfırın hemen yanındaki alttan taşma boşluğunu azaltılmış duyarlıkla dolduran subnormal sayıları (mantis sıfırdan farklı) kodlar. Bu aracın kapsadığı dört biçim — binary16/FP16, bfloat16, binary32/FP32, binary64/FP64 — yalnızca her alana kaç bit verdikleriyle ayrılır: daha fazla üs biti daha fazla aralık, daha fazla mantis biti daha fazla duyarlık demektir. Makine öğreniminin gözdesi bfloat16, mantisin alttaki 16 biti kesilmiş FP32'den ibarettir: aynı aralık, çok daha kaba duyarlık.
Yararlı bir zihinsel model şudur: temsil edilebilir float'lar, sayı doğrusu üzerinde aralığı — son basamaktaki bir birim, yani ULP — her 2 kuvvetinde ikiye katlanan bir ızgara oluşturur. 1.0 civarında bir double'ın ızgara aralığı yaklaşık 2.22 × 10⁻¹⁶'dır; 2⁵³ civarında ise tam bir tamsayıdır — double'ların 2⁵³'ün ötesini güvenilir biçimde sayamamasının nedeni budur. Bu araçtaki komşular paneli o ızgarayı doğrudan gösterir: yazdığınız değerin çevresindeki önceki ve sonraki temsil edilebilir değerler, aralarındaki tam boşlukla birlikte.
// 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 Temel Özellikler
Dört biçim, tek görünüm
Yarım (FP16), bfloat16, Tek (FP32) ve Çift (FP64) — tek tıklamayla geçiş yapın; tüm sayfa yeniden hesaplanır, böylece aynı sayının her biçimde nereye düştüğünü karşılaştırmak saniyeler alır.
Tıklanabilir bit ızgarası
Her bit bir düğmedir. İşareti çevirin, üssü bir kademe oynatın veya bir mantis bitine dokunun; ondalık, hex ve binary görünümlerin anında güncellendiğini izleyin — kodlamaya dair sezgi geliştirmenin en hızlı yolu.
Yaklaşıklık değil, saklanan tam değer
Araç, saklanan bitlerin tam ondalık açılımını kesin büyük tamsayı aritmetiğiyle hesaplar — bir double'daki 0.1 için 55 hanenin tamamı — ayrıca yazdığınız değere karşı işaretli tam yuvarlama hatasını verir.
Komşular ve ULP
Geçerli sayının çevresindeki önceki ve sonraki temsil edilebilir değerleri ve aralarındaki tam boşluğu (ULP) görün — herhangi bir büyüklükte gerçekte ne kadar duyarlığa sahip olduğunuzu belirleyen ızgara aralığı.
Özel değerler bir tık uzakta
Çipler ±0, ±Infinity, NaN, en küçük subnormal ve seçili biçimin en büyük sonlu değerini yükler; sınıflandırma rozeti geçerli bit deseninin neyi kodladığını adlandırır.
Paylaşılabilir kalıcı bağlantılar, sıfır yükleme
Bağlantıyı kopyala, biçimi ve tam bit desenini URL'ye kodlar — hata raporları, kod incelemeleri ve öğretim için ideal. Her şey tarayıcınızda çalışır; yazdığınız hiçbir şey sayfadan çıkmaz.
IEEE 754 Dönüşüm Örnekleri
Tek duyarlıkta 0.1 — klasik yuvarlama hatası
0.1
0x3DCCCCCD — gerçekte 0.100000001490116119384765625 olarak saklanır
Ondalık 0.1'in sonlu bir binary gösterimi yoktur; bu yüzden IEEE 754 onun yerine en yakın temsil edilebilir değeri saklar. Tek duyarlıkta (FP32) bu değer 0x3DCCCCCD'dir ve tam olarak 0.100000001490116119384765625'e eşittir — yaklaşık 1.49 × 10⁻⁹ kadar fazla. Araç, programlama dilinizin size geri yazdırdığı yuvarlanmış '0.1' yerine, saklanan bu tam değeri ve tam hatayı hane hane gösterir. Bu tek örnek, 0.1 + 0.2'nin neden 0.3'e eşit olmadığı dahil, kayan nokta sürprizlerinin çoğunu açıklar.
Float'tan hex'e: FP32'de 3.14159
3.14159
0x40490FD0
Tek (FP32) seçiliyken 3.14159 yazın; hex alanında 0x40490FD0 görünür — işaret 0, sapmalı üs 128 (yani 2¹), mantis 0x490FD0. Gerçekte saklanan değer 3.141590118408203125'tir; yazdığınızın bir tık üzerinde. Hex biçimi; ağ dökümlerinde, GPU arabelleklerinde, yazmaç görünümlerinde ve serileştirilmiş binary dosyalarda karşınıza çıkan biçimdir ve dönüşüm iki yönlü çalışır: geri çözmek için 40490FD0 değerini hex alanına yapıştırın.
FP16 maksimumu: yarım duyarlık 65504'te sona erer
65504
0x7BFF — en büyük sonlu FP16 değeri
Yarım duyarlıkta yalnızca 5 üs biti ve 10 mantis biti vardır; bu yüzden en büyük sonlu değeri 65504'tür (0x7BFF). 65520 veya daha büyük bir değer yazarsanız sonuç Infinity'ye (0x7C00) yuvarlanır — makine öğrenimi modellerini FP16'ya nicemlerken (quantization) gerçek bir tehlike. bfloat16'ya geçin; aynı 65520 rahatça sığar, çünkü bfloat16, mantis bitlerinden (duyarlıktan) vazgeçerek FP32'nin 8 üs bitini (aralığını) korur. ML eğitiminin bfloat16'yı, kompakt depolamanın ise FP16'yı tercih etmesinin nedeni tam olarak bu ödünleşimdir.
−0 ve +0: iki farklı bit deseni, tek değer
-0
0x80000000 (FP32); +0 ise 0x00000000
IEEE 754'te işaretli sıfır vardır: −0 yalnızca işaret bitini ayarlar (FP32'de 0x80000000), +0 ise tamamen sıfırlardan oluşur. Her dilde eşit karşılaştırılırlar; yine de 1/−0 sonucu −Infinity, 1/+0 sonucu +Infinity'dir, yani fark gözlemlenebilir. Araçta işaret bitine tıklayarak ikisi arasında geçiş yapın ve hex değişirken sınıflandırma rozetinin Sıfır'da kaldığını izleyin — bit düzeyinde eşitlik ile sayısal eşitliğin neden farklı şeyler olduğunun tek tıklık bir örneği.
IEEE 754 Kayan Noktalı Sayılar Nasıl Dönüştürülür
- 1
Bir kayan nokta biçimi seçin
Tek (FP32) önceden seçilidir. JavaScript/Python tarzı sayılar için Çift (FP64) biçimine, makine öğrenimi ve grafikte kullanılan 16-bit biçimler için Yarım (FP16) ve bfloat16'ya geçin.
- 2
Ondalık bir sayı yazın
Herhangi bir değer girin — 0.1, -2.5e3, 65504 — veya ±0, ±Infinity, NaN, en küçük subnormal ve en büyük sonlu değer için özel değer çiplerini kullanın. Dönüşüm siz yazdıkça gerçekleşir.
- 3
Renk kodlu bit düzenini okuyun
İşaret biti, üs alanı ve mantis farklı renklerle vurgulanır; alan dökümü tablosu ham bitleri, sapma aritmetiğini ve örtük öndeki biti gösterir.
- 4
Saklanan tam değeri ve hatayı kontrol edin
Doğruluk paneli, gerçekte saklanan değeri — her hanesi tam olarak hesaplanmış biçimde — yazdığınız değere karşı yuvarlama hatasıyla birlikte, ayrıca önceki ve sonraki temsil edilebilir komşuları ve ULP aralığını gösterir.
- 5
Bitleri çevirin, hex yapıştırın, sonuçları kopyalayın
Herhangi bir bite tıklayarak çevirin veya hex (3DCCCCCD) ve binary dizeleri yapıştırarak ondalığa geri çözün. Hex'i, binary'yi, tam değeri veya tam bit desenini yeniden üreten paylaşılabilir bir bağlantıyı kopyalayın.
Yaygın Kayan Nokta Hataları
Saklanan değer yerine yazdırılan değere güvenmek
Diller float'ları, gidiş-dönüşü koruyan en kısa dizeye yuvarlayarak yazdırır; bu yüzden 0.1 temiz görünür ama saklanan değer öyle değildir. Duyarlığı print() çıktısına göre değil, tam açılıma göre değerlendirin.
print(0.1) # 0.1 — tam görünür, değildir
0.1 saklanan (FP64) = 0.1000000000000000055511151231257827021181583404541015625
Float'ları tam eşitlikle karşılaştırmak
0.1 + 0.2, 0x3FD3333333333334 bit deseni üzerine düşer; 0.3 sabiti ise 0x3FD3333333333333'tür — bir ULP arayla; dolayısıyla ikisi de 0.3'e yakın yazdırılsa bile == yanlıştır.
if (0.1 + 0.2 === 0.3) { … } // asla çalışmaz if (Math.abs(a - b) < 1e-9) { … } // verinize göre boyutlandırılmış tolerans Aralığı kontrol etmeden FP16'ya nicemlemek
FP16'nın en büyük sonlu değeri 65504'tür. Daha büyük her şey Infinity olur ve bir Infinity hesaplamaya girdiğinde yayılır. Aşağı dönüştürmeden önce maksimumlarınızı kontrol edin — ya da FP32'nin aralığını koruyan bfloat16'yı kullanın.
fp16(65520) → Infinity (0x7C00) — sessiz taşma
bf16(65520) → sonlu (bfloat16, 8 üs bitini korur)
NaN'ı eşitlikle test etmek
NaN, kendisine eşit olmayan tek değerdir — bu bilinçli bir tasarımdır; böylece başarısız bir hesaplama gerçek bir sayı gibi görünemez. == yerine dilinizin isNaN kontrolünü kullanın ve milyonlarca farklı NaN bit deseni olduğunu unutmayın.
if (x === NaN) { … } // her zaman yanlış, x NaN olsa BİLE if (Number.isNaN(x)) { … } // doğru test IEEE 754 Dönüştürücü ile Neler Yapabilirsiniz
- Serileştirilmiş binary veride hata ayıklama
- Bir ağ yakalamasında, GPU arabelleğinde, yazmaç dökümünde veya dosya biçiminde bulduğunuz hex'i yapıştırın ve tam ondalık değere çözün — ya da test verileri yazmak için ters yönde gidin. Bayt sırası notu: gösterilen hex, big-endian bit desenidir; dökümünüz little-endian ise yapıştırmadan önce bayt sırasını ters çevirin.
- ML nicemlemesini anlama
- Değerlerinizin FP16'nın 65504 tavanından sağ çıkıp çıkmadığını kontrol edin, FP16 ile bfloat16 duyarlık kaybını hane hane karşılaştırın ve gradyanların alttan taştığı subnormal aralığı inceleyin.
- Bir kayan nokta hatasını açıklama
- Bir meslektaşınız 'eşit' iki sayının neden farklı olduğunu sorduğunda, iki bit desenini ve saklanan tam değerleri gösteren bir kalıcı bağlantı gönderin — tartışma kendiliğinden kapanır. Daha uzun dökümler için metin karşılaştırma aracı ile birlikte kullanın.
- Kodlamayı öğrenme veya öğretme
- Öğrenciler üs bitlerine tıklayıp sapma aritmetiğinin güncellendiğini izleyebildiğinde bilgisayar mimarisi dersleri somutlaşır. Alan dökümü tablosu, ders kitaplarının biçimi çizme şeklini yansıtır.
- Gömülü ve endüstriyel yazmaçları çözme
- Modbus, CAN ve sensör verileri FP32 değerlerini düzenli olarak ham hex sözcükler halinde taşır. Fiziksel değeri okumak için sözcüğü buraya yapıştırın; geçici bir betik yazmanıza gerek kalmaz.
IEEE 754 Biçimleri ve Özel Değerler
- Dört binary biçime bir bakış
- binary16 (FP16): 1 işaret + 5 üs + 10 mantis biti, sapma 15, maks 65504, ~3.3 ondalık hane. bfloat16: 1 + 8 + 7, sapma 127, maks ≈ 3.39 × 10³⁸, ~2.3 hane. binary32 (FP32): 1 + 8 + 23, sapma 127, maks ≈ 3.40 × 10³⁸, ~7.2 hane. binary64 (FP64): 1 + 11 + 52, sapma 1023, maks ≈ 1.80 × 10³⁰⁸, ~15.9 hane. Desen şu: üs bitleri aralık, mantis bitleri duyarlık kazandırır; bfloat16 ise duyarlığının tamamını bilinçli olarak FP32'nin aralığıyla takas eder.
- Bir değer nasıl birleştirilir
- Normal bir sayı (−1)^işaret × 1.mantis × 2^(üs − sapma) olarak çözülür. Öndeki 1 örtüktür — saklanmaz; 23-bit mantis alanının 24 bit duyarlık sunmasının nedeni budur. Saklanan üs, gerçek üs artı sapmadır (FP32'de 127); dolayısıyla 2⁰, 01111111 olarak saklanır. Bu araçtaki alan dökümü tablosu, geçerli değer için bu aritmetiğin her adımını gösterir.
- Özel değerler: ayrılmış üs desenleri
- Üs tamamen bir ve mantis sıfırsa ±Infinity'dir; mantis sıfırdan farklıysa NaN'dır (kanonik sessiz NaN, mantisin en üst bitini ayarlar). Üs tamamen sıfır ve mantis sıfırsa ±0'dır; mantis sıfırdan farklıysa subnormal'dir ve 0.mantis × 2^(1 − sapma) olarak çözülür — örtük öndeki 1 yoktur. Bu kurallar dört biçimde de birebir aynıdır; aynı çiplerin her birinde çalışmasının nedeni budur.
- Yuvarlama: en yakına, eşitlikte çifte
- Bir değer temsil edilebilir iki sayının arasına düştüğünde, IEEE 754'ün varsayılan modu daha yakın olana yuvarlar; tam eşitlik durumunda son mantis biti 0 olanı seçer (eşitlikte çifte / ties to even), bu da sistematik kaymayı önler. Bu dönüştürücü, ondalık girdinizi hedef biçime daraltırken tam olarak bu kuralı uygular ve hata paneli oluşan işaretli farkı tam olarak gösterir.
- ULP: float'ların ızgara aralığı
- Temsil edilebilir float'lar eşit dağılmaz — komşular arasındaki boşluk (son basamaktaki bir birim) her 2 kuvvetinde ikiye katlanır. 1.0 civarında bir double'ın ULP'si 2⁻⁵² ≈ 2.22 × 10⁻¹⁶'dır; 2⁵³ civarında ULP 1.0'a ulaşır ve tamsayılar atlanmaya başlar. Komşular paneli geçerli ULP'yi tam olarak yazdırır; 'sayım burada gerçekte ne kadar duyarlı?' sorusunun dürüst yanıtı budur.
Kayan Nokta En İyi Uygulamaları
- Float'ları asla == ile karşılaştırmayın
- Herhangi bir aritmetikten sonra, matematiksel olarak eşit iki ifade bir ULP arayla durabilir. Büyüklüklerinize uygun bir toleransla karşılaştırın — ya da bu aracın doğrudan incelemenize izin verdiği bit desenleri arasındaki ULP'leri sayın.
- Parayı binary float'lardan uzak tutun
- Hiçbir 2 kuvveti ızgarası 0.10'u tam olarak içermez; bu yüzden float'larda tutulan para gözle görülür hatalar biriktirir. Tamsayı kuruş veya ondalık bir tür kullanın; buradaki saklanan tam değer paneli bunun nedeninin kalıcı kanıtıdır.
- 16-bit biçimi alışkanlığa göre değil, aralığa göre seçin
- Değerleriniz 65504'ü aşabiliyorsa — kayıplar, gradyanlar, fizik sıçramaları — FP16 Infinity'ye taşarken bfloat16 yoluna devam eder. Her şey dar bir banda normalleştirilmişse, FP16'nın fazladan mantis bitleri gözle görülür biçimde daha iyi duyarlık verir.
- Daraltırken çifte yuvarlama tuzağına dikkat edin
- Ondalık → double → yarım dönüşümü, nadir orta nokta durumlarında ondalık → yarım doğrudan dönüşümünden bir ULP uzağa düşebilir. Bu araç, ondalık girdinizi hedef biçime tek adımda yuvarlar; gördüğünüz şey dürüst IEEE 754 yanıtıdır.
- Tamsayıların 2⁵³ üzerinde bozulmasını bekleyin
- Bir double, 2⁵³'e kadar her tamsayıyı tam olarak saklar, sonra atlamaya başlar — 2⁵³ + 1 temsil edilemez. O ölçeğe yakın kimlikler veya sayaçlarla uğraşıyorsanız 64-bit tamsayılar veya dizeler kullanın ve şüpheli değerleri burada bit düzeyinde kontrol edin.
IEEE 754 Dönüştürücü SSS
0.1 + 0.2 neden 0.3'e eşit değildir?
IEEE 754 nedir?
FP16 ile bfloat16 arasındaki fark nedir?
Subnormal (denormal) sayılar nedir?
Float mı double mı kullanmalıyım?
Bir float'ı elle hex'e nasıl dönüştürürüm?
Bu dönüştürücüyü kullanırken verilerim yükleniyor mu?
İlgili Araçlar
Tüm araçları görüntüleyin →Sayı Tabanı Dönüştürücü — Binary, Hex, Decimal ve Octal
Dönüştürme Araçları
Binary, hex, decimal, octal ve herhangi bir taban (2-36) arasında anında dönüştürün. Ücretsiz ve gizli — tüm işlem tarayıcınızda yapılır.
Renk Dönüştürücü — HEX, RGB, HSL & OKLCH
Dönüştürme Araçları
HEX'i RGB, HSL, OKLCH, OKLAB ve CMYK biçimlerine tarayıcınızda dönüştürün — herhangi bir biçimi tek tıkla kopyalayın. Ücretsiz, kayıt yok, renkleriniz sayfadan asla çıkmaz.
HEX'ten CMYK'ye Dönüştürücü
Dönüştürme Araçları
HEX renklerini tarayıcınızda CMYK'ye dönüştürün. Baskı önizlemeleri için sRGB tabanlı saf yaklaşım. Ücretsiz, kayıt yok, renkleriniz sayfadan asla çıkmaz.
HEX'ten HSL'ye Dönüştürücü
Dönüştürme Araçları
Herhangi bir HEX rengi tarayıcınızda HSL'ye dönüştürün — 3 haneli, 6 haneli ve alpha içeren 8 haneli HEX desteklenir. Ücretsiz, anında, kayıt yok, renkleriniz sayfadan asla çıkmaz.
HEX'ten OKLCH'ye Dönüştürücü
Dönüştürme Araçları
Tailwind v4 tasarım token'ları için HEX'i OKLCH'ye dönüştürün. Display P3 renk gamı uyarılarıyla canlı algısal olarak tekdüze çıktı. Ücretsiz, yalnızca tarayıcıda.
HEX'ten RGB'ye Dönüştürücü
Dönüştürme Araçları
Herhangi bir HEX renk kodunu tarayıcınızda RGB'ye dönüştürün — 3 haneli, 6 haneli ve alpha içeren 8 haneli HEX desteklenir. Ücretsiz, anında, kayıt yok, renkleriniz sayfadan asla çıkmaz.