Kayan nokta gösterimi neden negatif sayıları belirtmek için 2'nin tamamlayıcısı yerine bir işaret biti kullanıyor?


20

Kayan bir sayının dejenere durumu olarak kabul edilebilecek bir sabit nokta gösterimini düşünün. Negatif sayılar için 2'nin tamamlayıcısını kullanmak tamamen mümkündür. Ama neden kayan nokta sayıları için bir işaret biti gereklidir, mantis bitleri 2'nin tamamlayıcılarını kullanmamalıdır?

Ayrıca üs bitleri işaretli büyüklükte temsil (mantis bitlerine benzer) veya 2'nin tamamlayıcı gösterimi yerine bir sapma kullanıyor mu?

Güncelleme: Anlaşılmadıysa özür dilerim. Kayan nokta gösteriminin şekillenmesinin nedenini arıyordum. Eğer alternatifler arasında güçlü bir uygulama dengesi yoksa, o zaman birisi kayan nokta gösteriminin tarihsel yönlerini açıklayabilir mi?

Yanıtlar:


7

Söz konusu iki varlık aynı "birimlere" ve aynı "genişliğe" sahip olduğunda, ikisinin tamamlayıcısı mantıklıdır. Genişlikle, yani, N ve M'nin farklı olduğu bir N bit numarası ve bir M bit numarası ekliyorsanız, ikisinin tamamlayıcısını kullanmamanız iyi olur. Kayan nokta sayıları için, birimler problemimiz var: üsler farklıysa, zihinsel olarak mantislerden birini değiştiriyoruz ve şimdi eskisi gibi (aynı zamanda) aynı sorundayız.

Üs bitlerine gelince, işaret + büyüklük yerine bir sapma kullanarak bir değer daha kazanırız (aksi takdirde +0 ve -0 olurdu). Burada ikinin tamamlayıcısı sayıları çarparken veya bölerken anlamlıdır (o zamandan beri üsleri ekliyoruz veya çıkarıyoruz), ancak eklerken veya çıkarırken o kadar da anlamlı değil.

Düzenleme: Bir yorumcu, işaret uzantısını kullanarak farklı uzunluklarda ikinin tamamlayıcı tam sayılarını ekleyebileceğinizi belirtti. Taşma tespiti ile ilgili bir sorun da var, ancak bu da düzeltilebilir. Özetle, yeterince dikkatli olursanız muhtemelen ikisinin tamamlayıcısını kullanabilirsiniz. (Çarpma ve bölme işlemlerini de yapmanız gerekir.)


4
“N ve M'nin farklı olduğu bir N bit numarası ve M bit numarası ekliyorsanız, ikisinin tamamlayıcısını kullanmasanız iyi olur” - Biraz açıklığa kavuşturabilir misiniz? MSB'yi kullanarak 2'nin tamamlayıcı temsilini kullanarak bir sayıyı genişletmek tamamen imkansızdır, örneğin 4'b1111, 5'b11111 ve 4'b0111 -> 5'b00111'e uzanacaktır. Bunu bir kayan nokta aritmetik mantığı içinde mevcut varil değiştiriciye eklemek kolay olmamalı mı?
koo

Cevabınız için teşekkür ederim! Soruyu düzenledim, böylece mevcut kayan noktayı ne yaptığını daha net bir şekilde soruyor.
koo

4

Wikipedia'dan:

İkinin tamamlayıcı sistemi, toplama, çıkarma ve çarpma işlemlerinin temel aritmetik işlemlerinin imzasız ikili sayılarla aynı olması avantajına sahiptir ...

İkisinin tamamlayıcısı negatif sayıların temsilidir ve bu çok uygun olur. Bunu kullanmak için bütün sebep bu.

Mantis-üslü çift bir kayan nokta sayısının temsilidir. Çoğu zaman kayan nokta sayılarını kullanırken, sadece mantis üzerinde veya sadece üs üzerinde aritmetik yapmazsınız.


4

Ancak kayan nokta sayıları için neden bir işaret biti gereklidir?

Yanlış varsayım. Gerekli değil. Mantis için 2'nin tamamlayıcısını kullanan kayan nokta formatlarıyla tanıştığımdan eminim, ancak isimler için kazmak zorunda kalacağım.

Sayısal analizde uzman olmaktan çok uzaktayım, ancak sıfır imzalamanın onlar için önemli olduğunu anlıyorum. Muhtemelen manipüle etmek, tamamlayıcılarından daha kolaydır. Bu muhtemelen IEEE-754 seçiminde bir kriterdi.

Ayrıca üs bitleri neden işaretli büyüklükte temsil yerine bir sapma kullanıyor?

Yine bu gerekli olmayan bir şey ve bazıları farklı bir şey yaptı.

Üstler üzerinde yapılan işlemler için bir donanım uygulaması yapmanın daha kolay olduğu temsildir (ve burada -0 için bir temsil olması istenmez).

Bu seçimin sonuçlarından biri, belki de bazıları için bir kriter olan NaN'yi umursamıyorsanız FP numarasını karşılaştırmak için imzalı tamsayı karşılaştırmasını kullanabilmenizdir (NaN'nin özel işleme ihtiyaç duyduğu gerçeği, IEEE-754 için).


İşaretli tamsayı karşılaştırmaları negatif FP sayılarını geriye doğru sıralar. Düzgün sıralamaları için, bir tür tamamlayıcı formatı gerekli olurdu, tamamlayıcıları muhtemelen en iyisi olurdu (negatif olan ... 110.1111 ... sonsuz ve solda ve sağda).
supercat

3
MIL-STD-1750A muhtemelen ikisinin tamamlayıcı kayan nokta gösterimini belirten en yaygın kullanılan işlemci mimarisidir. Bölüm 4.1: "Komut kümesi, 16'lı sabit nokta tek duyarlıklı, 32 bitlik sabit nokta çift duyarlıklı, 32 bit kayan nokta ve 48 bit kayan nokta genişletilmiş hassas verileri 2'nin tamamlayıcı gösteriminde destekleyecektir. " (Vurgu mayını) .
njuffa

2

IEEE 754 ikisinin tamamlayıcısı veya tamamlayıcısı değil, işaret / büyüklük kullanır.

İkisinin tamamlayıcısı, pozitif ve negatif aralığın aynı olmaması dezavantajına sahiptir. Tüm bit kalıpları geçerliyse, -x'i kolayca hesaplayamadığınız x sayılarına sahipsiniz. Bu kötü. Alternatif olarak, geçersiz bit kalıpları da vardır, bu da kötüdür. IEEE 754'te 64 veya 32 bit kayan nokta için geçersiz bit desenleri yoktur, bu yüzden endişelenmenize gerek yoktur.

Bir kişinin tamamlayıcısı, çarpmayı / bölünmeyi daha karmaşık hale getirecektir (işaretli büyüklükte, sadece işaretleri xorve ve mantisayı işaretsiz bir sayı olarak ele alırsınız). Toplama ve çıkarma için, bir kişinin tamamlayıcısı içinde toplama ve çıkarma hakkında düşünmek istemiyorum, bu kafamı acıtıyor.


Bu cevabın ilk paragrafı işaret / büyüklük açısından hiçbir dezavantaj olmadığını göstermektedir. İşaret / büyüklük ikisinin tamamlayıcısından +/- 0 ve daha karmaşık aritmetiğe sahiptir.
Praxeolitic

+/- sıfıra sahip olmak hem sorun hem de özelliktir. Örneğin, küçük bir x sayısını 10 ^ 100'e bölmek, x işaretini koruyarak +0 veya -0 verir.
gnasher729

1

İmzalanmış sıfırlara sahip olmak, sayısal hesaplamalarda yararlı olabilecek ifade gücünü arttırır. ' İmzalı sıfır ' wikipedia sayfası :

IEEE 754'e imzalı sıfır eklenmesinin, özellikle karmaşık temel işlevlerle hesaplama yaparken bazı kritik problemlerde sayısal doğruluk elde etmeyi çok daha kolay hale getirdiği iddia edilmektedir .

IEEE 754 kayan noktanın ana tasarımcılarından biri olan WH Kahan , bu nedenlerden dolayı imzalı sıfırın savunucusudur. Onun düşüncesi muhtemelen çok fazla ağırlık taşıyacaktır.


1

Kayan nokta hesaplamalarının kesin değerler değil yaklaşık değerler ürettiğini anlamak önemlidir . Bir kayan nokta hesaplama kodlanmış bir değeri X eşleşiyorsa olup bu, daha sonra bunun bir temsil teorik olarak ideal bir değer hemen hemen kesin değil X, ancak aralığı [X içinde .. X + e) {burada, 'e' 'olduğu makine epsilon ', yani X ve X + e} arasında kayan nokta sayısı yoktur. Daha spesifik olarak, bir kayan nokta sıfır, muhtemelen tam olarak sıfır olmayan, ancak sıfır olmayan bir kayan nokta kodlanmış değerle temsil edilemeyecek kadar küçük olan ideal bir sayıyı temsil eder.

Bununla birlikte, işaret ve büyüklük gösterimini kullanmak, kodlamanın sıfırın tam olarak hangi tarafını 'hatırlamasına' izin vermenin bir yoludur. , ideal değerin , pozitif veya negatif olduğunu . Bu, bazı karmaşık ('a + bi' anlamda) hesaplamalarda kritiktir - karmaşık-> karmaşık fonksiyonlar genellikle 'çok değerlidir', bu nedenle doğru hesaplama için 'dal kesimlerinin' konumlarına dikkat etmek önemlidir. İmzalı sıfırlar daha sonra bir anlamda bu şube kesimlerinin yerlerini işaretler - pozitif tarafta yapılan hesaplama negatif taraftakinden farklı olacaktır.


1
Kayan nokta hesaplamaları kesin değerler üretir . Matematiksel gerçek sayıların ürettiği değerlerden biraz farklıdırlar. Kayan nokta sayısı bir aralığı değil, bir sayıyı temsil eder.
gnasher729

0

Çoğu kayan nokta formatı, ikili bir sistemde, minimum olmayan üslü sıfır olmayan herhangi bir değerin mantisin en önemli biti olarak "1" e sahip olması gerçeğinden yararlanır. Bu nedenle, mantis için 23 bit alana sahip bir sistemde, pozitif sayıların mantisleri 0 ila 8.388.607 arasında değil, 8.388.608 ila 16.777.215 arasında değişir. Pozitif olabilecek veya olmayabilecek sayıların mantisleri -16.777.215 ila -8.388.608 ve +8.388.608 ila +16.777.215 arasında değişmektedir. İkisinin tamamlayıcısı en iyi sayısal biçim olsa da, hesaplamaların "sorunsuz" sıfıra çarpması gerektiğinde, mantis değerlerinin süreksiz aralıkları, hesaplamaların ikisinin tamamlayıcısı ya da başka bir şey kullansa da sıfır boyunca düzgün çalışamayacağı anlamına gelir. .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.