Tek hassasiyet ve çift hassasiyetli kayan nokta işlemi arasındaki fark nedir?


169

Tek hassas kayan nokta işlemi ile çift hassas kayan nokta işlemi arasındaki fark nedir?

Özellikle video oyun konsollarıyla ilgili pratik terimlerle ilgileniyorum. Örneğin, Nintendo 64'ün 64 bit işlemcisi var mı ve eğer öyleyse, bu çift hassas kayan nokta işlemlerini yapabileceği anlamına mı gelir? PS3 ve Xbox 360 çift hassas kayan nokta işlemlerini veya sadece tek bir hassasiyeti çıkarabilir mi ve genel kullanımda (eğer varsa) kullanılan çift hassasiyetli yetenekler kullanılabilir mi?


17
CPU'nun 64 bit olması genellikle CPU'nun 64 bit genel amaçlı kayıtlara (yani tamsayı) ve bellek adres boyutuna sahip olduğu anlamına gelir . Ama kayan nokta matematiği hakkında hiçbir şey söylemiyor. Örneğin, Intel IA-32 CPU'lar 32 bittir, ancak çift hassas şamandıraları yerel olarak desteklerler.
Roman Zavalov

Yanıtlar:


215

Not: Nintendo 64'ün 64 bit işlemcisi vardır, ancak:

Birçok oyun, 64 bit veri türleri ile mevcut daha yüksek veri hassasiyeti 3D oyunlar için tipik olarak gerekli olmadığından ve 64 bit veri işlemenin iki kat daha fazla RAM, önbellek kullandığından, çipin 32 bit işleme modundan yararlandı. ve bant genişliği sayesinde genel sistem performansını düşürür.

Gönderen Webopedia :

Çift kesinlik terimi yanlış bir isimdir, çünkü kesinlik gerçekten çift değildir.
Çift kelimesi, çift kesinlikli bir sayının normal kayan nokta sayısının iki katı kadar bit kullanmasından kaynaklanır.
Örneğin, tek duyarlıklı bir sayı 32 bit gerektiriyorsa, çift duyarlıklı karşılığı 64 bit uzunluğunda olacaktır.

Ekstra bitler sadece hassasiyeti değil, aynı zamanda temsil edilebilecek büyüklük aralığını da artırır.
Hassasiyet ve büyüklük aralığının tam olarak ne kadar artırıldığı, programın kayan nokta değerlerini temsil etmek için hangi biçimi kullandığına bağlıdır.
Çoğu bilgisayar, IEEE kayan nokta biçimi olarak bilinen standart bir biçim kullanır.

IEEE çift kesinlikli format aslında tek kesinlikli formatın iki katından daha fazla kesinlik değerine ve daha geniş bir aralığa sahiptir.

Gönderen kayan nokta aritmetik için IEEE standardı

Tek hassasiyet

IEEE tek kesinlikli kayar nokta standart gösterimi, soldan sağa 0 ile 31 arasında sayılabilen 32 bitlik bir sözcük gerektirir.

  • İlk bit işaret biti, S,
  • sonraki sekiz bit üs bitleri, 'E' ve
  • son 23 bit 'F' fraksiyonudur :

    S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF
    0 1      8 9                    31
    

Kelimenin temsil ettiği V değeri aşağıdaki gibi belirlenebilir:

  • E = 255 ve F sıfır değilse, V = NaN ("Sayı değil")
  • E = 255 ve F sıfır ve S 1 ise, V = -Infinity
  • E = 255 ve F sıfır ve S 0 ise, V = Sonsuzluk
  • Eğer 0<E<255öyleyse, V=(-1)**S * 2 ** (E-127) * (1.F)burada "1.F", örtük bir satır aralığı 1 ve bir ikili nokta ile F önekinin oluşturulmasıyla oluşturulan ikili sayıyı temsil etmeyi amaçlamaktadır.
  • E = 0 ve F sıfır değilse, o zaman V=(-1)**S * 2 ** (-126) * (0.F). Bunlar "normalleştirilmemiş" değerlerdir.
  • E = 0 ve F sıfır ve S 1 ise, V = -0
  • E = 0 ve F sıfır ve S 0 ise, V = 0

Özellikle,

0 00000000 00000000000000000000000 = 0
1 00000000 00000000000000000000000 = -0

0 11111111 00000000000000000000000 = Infinity
1 11111111 00000000000000000000000 = -Infinity

0 11111111 00000100000000000000000 = NaN
1 11111111 00100010001001010101010 = NaN

0 10000000 00000000000000000000000 = +1 * 2**(128-127) * 1.0 = 2
0 10000001 10100000000000000000000 = +1 * 2**(129-127) * 1.101 = 6.5
1 10000001 10100000000000000000000 = -1 * 2**(129-127) * 1.101 = -6.5

0 00000001 00000000000000000000000 = +1 * 2**(1-127) * 1.0 = 2**(-126)
0 00000000 10000000000000000000000 = +1 * 2**(-126) * 0.1 = 2**(-127) 
0 00000000 00000000000000000000001 = +1 * 2**(-126) * 
                                     0.00000000000000000000001 = 
                                     2**(-149)  (Smallest positive value)

Çift Hassasiyet

IEEE çift kesinlikli kayar nokta standart gösterimi, soldan sağa 0 ile 63 arasında sayılabilecek 64 bitlik bir sözcük gerektirir.

  • İlk bit işaret biti, S,
  • sonraki on bir bit üs bitleri, 'E' ve
  • son 52 bit 'F' fraksiyonudur :

    S EEEEEEEEEEE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    0 1        11 12                                                63
    

Kelimenin temsil ettiği V değeri aşağıdaki gibi belirlenebilir:

  • E = 2047 ve F sıfır değilse, V = NaN ("Sayı değil")
  • E = 2047 ve F sıfır ve S 1 ise, V = -Infinity
  • E = 2047 ve F sıfır ve S 0 ise, V = Sonsuzluk
  • Eğer 0<E<2047öyleyse, V=(-1)**S * 2 ** (E-1023) * (1.F)burada "1.F", örtük bir satır aralığı 1 ve bir ikili nokta ile F önekinin oluşturulmasıyla oluşturulan ikili sayıyı temsil etmeyi amaçlamaktadır.
  • E = 0 ve F sıfır değilse, V=(-1)**S * 2 ** (-1022) * (0.F)Bunlar "normalleştirilmemiş" değerlerdir.
  • E = 0 ve F sıfır ve S 1 ise, V = -0
  • E = 0 ve F sıfır ve S 0 ise, V = 0

Referans:
ANSI / IEEE Standart 754-1985,
İkili Kayan Nokta Aritmetiği için Standart.


9
Bunu kaynağınızdan biliyorum, ama şu cümleyi sevmiyorum: "Çift kesinlik terimi yanlış bir şeydir, çünkü kesinlik gerçekten çift değildir." Tek ve Çift hassasiyet bu günlerde IEEE tarafından oldukça evrensel olarak tanımlanmıştır ve belirttiğiniz gibi, tek hassasiyetin kesirde 23 bit ve çiftin 52 biti vardır - bu temelde hassaslığın iki katıdır ...
Carl Walsh

5
@ZeroDivide ' **' is Exponentiation
VonC

11
@CarlWalsh 52/23! = 2 ergo "hassasiyeti ikiye
katlamıyor


2
@rfoo Bilgiçlikçi olmak istiyorsanız, tam olarak iki kat değil , 52/2> 23 yani evet, hassasiyetin iki katı, sadece iki katına ve sonra biraz daha.
JShorthouse

42

Birçok cevap okudum ama hiçbiri double kelimesinin nereden geldiğini doğru bir şekilde açıklamıyor gibi görünüyor . Birkaç yıl önce sahip olduğum bir üniversite profesörü tarafından verilen çok iyi bir açıklamayı hatırlıyorum.

VonC'nin cevabının tarzını hatırlatarak, tek bir hassas kayan nokta gösterimi 32 bitlik bir kelime kullanır.

  • 1 bit işareti , S
  • Onent 'E' üssü için 8 bit
  • Mantis veya katsayı olarak da adlandırılan kesir için 24 bit (sadece 23'ü temsil etmesine rağmen). Buna 'M' diyelim ( mantis için bu ismi "kesir" yanlış anlaşılabileceği için tercih ederim).

Temsil:

          S  EEEEEEEE   MMMMMMMMMMMMMMMMMMMMMMM
bits:    31 30      23 22                     0

(Sadece işaret etmek için, işaret biti ilk değil, sonuncudur.)

Bir çift kayan ayrımlı hassas 64 bit bir kelime kullanır.

  • 1 bit işareti , S
  • 'E' üssü için 11 bit
  • Kesir / mantis / katsayı için 53 bit (sadece 52 temsil edilmiş olmasına rağmen), 'M'

Temsil:

           S  EEEEEEEEEEE   MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
bits:     63 62         52 51                                                  0

Fark edebileceğiniz gibi, mantisin her iki tipte de temsiline kıyasla biraz daha fazla bilgiye sahip olduğunu yazdım . Aslında, mantis, önemsiz olmadan temsil edilen bir sayıdır 0. Örneğin,

  • 0.000124 0.124 × 10 −3 olur
  • 237.141 olur 0.237141 × 10 3

Bu mantis her zaman formda olacak demektir

0.α 1 α 2 ... α t × β p

burada β temsilin temelidir. Fraksiyonu bir ikili sayı olması itibariyle, a 1 , her zaman bu şekilde fraksiyon 1.α olarak yeniden olabilir, 1 'e eşit olacak 2 α 3 ... α t + 1 × 2 , p ve dolaylı olarak kabul edilebilir başlangıç 1 ekstra bir bit için yer açmak (α t + 1 ).

Şimdi, 32'nin çiftinin 64 olduğu açıktır, ancak kelimenin geldiği yer bu değildir.

Hassas olan ondalık basamak sayısını gösterir doğru temsili hatası veya yaklaşık her türlü olmadan, yani. Başka bir deyişle, kaç tane ondalık basamağın güvenle kullanılabileceğini gösterir.

Bununla birlikte, güvenle kullanılabilecek ondalık basamak sayısını tahmin etmek kolaydır:

  • tek duyarlık : yaklaşık 7 ~ 8 ondalık basamak olan log 10 (2 24 )
  • çift ​​duyarlık : yaklaşık 15 ~ 16 ondalık basamak olan log 10 (2 53 )

19

Tamam, makinedeki temel fark, çift hassasiyetin tekli değerin iki katı kadar bit kullanmasıdır. Normal uygulamada, bu tek için 32 bit, çift için 64 bittir.

Peki bu ne anlama geliyor ? IEEE standardını varsayarsak, tek bir hassas sayının yaklaşık 23 bit mantis ve maksimum üssü yaklaşık 38'dir; çift ​​hassasiyette mantis için 52 bit ve maksimum 308 üs bulunur.

Ayrıntılar her zamanki gibi Wikipedia'da .


11

Buradaki tüm harika cevaplara eklemek için

Her şeyden önce float ve double sayıları kesirli sayıların gösterimi için kullanılır. Yani, ikisi arasındaki fark, sayıları ne kadar hassasiyetle saklayabileceklerinden kaynaklanıyor.

Örneğin: 123.456789 saklamak zorundayım Biri sadece 123.4567 saklayabilirken, diğeri tam 123.456789'u saklayabilir.

Temel olarak, sayının ne kadar doğru saklanabileceğini ve hassasiyet dediğimiz şey olduğunu bilmek istiyoruz.

@Alessandro alıntı

Kesinlik, doğru olan ondalık hane sayısını , yani herhangi bir gösterim hatası veya yaklaşımı olmadan gösterir. Başka bir deyişle, kaç tane ondalık basamağın güvenle kullanılabileceğini gösterir.

Şamandıra kesirli kısımda yaklaşık 7-8 basamak doğru bir şekilde saklayabilirken, Çift kesirli kısımda yaklaşık 15-16 basamak doğru bir şekilde saklayabilir

Böylece, şamandıra kesirli parçanın iki katını depolayabilir . Bu yüzden Double çift ​​şamandıra olarak adlandırılır


7

"Ps3 ve xbxo 360, çift duyarlıklı kayan nokta işlemlerini veya yalnızca tek bir duyarlık ve genel kullanımda (eğer varsa) kullanılan çift duyarlık yeteneklerini kaldırabilir mi?" Sorusuna gelince.

Her iki platformun da çift kayan noktadan yoksun olduğuna inanıyorum. Orijinal Hücre işlemcisinde XBox 360'ın dayandığı (R600) ATI donanımı ile aynı olan sadece 32 bit şamandıra vardı. Hücre daha sonra çift kayan nokta desteği aldı, ancak PS3'ün bu chippery'yi kullanmadığından eminim.


5

Temel olarak tek duyarlıklı kayar nokta aritmetiği 32 bit kayar nokta sayısı ile, çift ​​duyarlıklı 64 bit ile ilgilidir.

Çift kesinlikteki bit sayısı, saklanabilecek maksimum değeri arttırmanın yanı sıra hassasiyeti (yani anlamlı basamakların sayısını) artırır.


5

Tüm ayrıntılı olarak açıkladı ve hiçbir şey daha fazla ekleyebilirsiniz. Yine de Layman'ın Şartları ya da basit İNGİLİZCE açıklamak istiyorum

1.9 is less precise than 1.99
1.99 is less precise than 1.999
1.999 is less precise than 1.9999

.....

"1.9" 'u saklayabilen veya temsil edebilen bir değişken, 1.9999 tutabilen veya temsil edebilen değişkenden daha az kesinlik sağlar. Bu Kesir, büyük hesaplamalarda büyük bir fark oluşturabilir.


2

Çift kesinlik, sayıların saklanması için kelime uzunluğunun iki katını aldığı anlamına gelir. 32 bit işlemcide, kelimelerin tümü 32 bittir, bu nedenle çiftler 64 bittir. Performans açısından bunun anlamı, çift kesinlikli sayılar üzerindeki işlemlerin yürütülmesinin biraz daha uzun sürmesidir. Böylece daha iyi bir menzil elde edersiniz, ancak performansta küçük bir isabet vardır. Bu isabet, donanım kayan nokta birimleri tarafından biraz azaltılır, ancak hala oradadır.

N64, 64 bit işlemci olan MIPS R4300i tabanlı NEC VR4300 kullandı, ancak işlemci sistemin geri kalanıyla 32 bit genişliğinde bir veri yolu üzerinden iletişim kuruyor. Bu nedenle, çoğu geliştirici daha hızlı oldukları için 32 bit sayıları kullandı ve o zamanki oyunların çoğunda ek hassasiyete ihtiyaç duyulmadı (bu nedenle floatlar iki katına çıkmadı).

Her üç sistem de tek ve çift hassas yüzer işlemler yapabilir, ancak performans nedeniyle olmayabilir. (N64'ten sonra hemen hemen her şey 32 bitlik bir veri yolu kullansa da ...)


1

Her şeyden önce float ve double sayıları kesirli sayıların gösterimi için kullanılır. Yani, ikisi arasındaki fark, sayıları ne kadar hassasiyetle saklayabileceklerinden kaynaklanıyor.

Örneğin: 123.456789 saklamak zorundayım Biri sadece 123.4567 saklayabilirken, diğeri tam 123.456789'u saklayabilir.

Temel olarak, sayının ne kadar doğru saklanabileceğini ve hassasiyet dediğimiz şey olduğunu bilmek istiyoruz.

@Alessandro alıntı

Kesinlik, doğru olan ondalık hane sayısını, yani herhangi bir gösterim hatası veya yaklaşımı olmadan gösterir. Başka bir deyişle, kaç tane ondalık basamağın güvenle kullanılabileceğini gösterir.

Şamandıra kesirli kısımda yaklaşık 7-8 basamak doğru bir şekilde saklayabilirken, Çift kesirli kısımda yaklaşık 15-16 basamak doğru bir şekilde saklayabilir

Böylece, çift şamandıra olarak kesirli kısmın iki katını depolayabilir. Bu yüzden Double çift şamandıra olarak adlandırılır


0

IEEE754'e göre • Kayan noktalı depolama standardı • 32 ve 64 bit standartlar (tek kesinlik ve çift kesinlik) • Sırasıyla 8 ve 11 bit üs • Ara sonuçlar için genişletilmiş biçimler (hem mantis hem de üs)


-3

Tek duyarlıklı sayı 32 bit, MSB işaret biti, çift duyarlıklı sayı 64 bit, MSB işaret biti kullanır

Tek hassasiyet

SEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFF.(SIGN+EXPONENT+SIGNIFICAND)

Çift hassasiyet:

SEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF.(SIGN+EXPONENT+SIGNIFICAND)

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.