Makale numarası: 69333 - Son Gözden Geçirme: 16 Ağustos 2005 Salı - Gözden geçirme: 2.2

Iş, etrafında kayan nokta doğruluğu/karşılaştırma sorunları nasıl

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.
Hepsini aç | Hepsini kapa

Özet

Güvenilir, iki olup olmadığını sınamak için kayan nokta değişken veya ifade (MBF ya da IEEE biçimi kullanarak) eşit, karşılaştırılan iki değişkenleri çıkarma ve bunların fark sınırları, anlamın için tek veya çift duyarlıklı sırasında seçilen değerinden küçük olup olmadığını sınamak gerekir. GÜVENİLİR YOK BİR SINAMA İÇİN EŞİTLİK OLACAKTIR. Aşağıdaki formüllerde, güvenilir X ve Y eşit olup olmadığını sınayın:

  1. Tek duyarlıklı için sınamalısınız olup olmadığını fark x ve Y, X ' küçük değer 7 anlamlı basamağa değerinden küçük veya Y. Bölme X veya Y tarafından 10 ^ 7 karşılaştırma değeri bulmak için. Örneğin:
          ' To try this example in VBDOS.EXE:
          ' 1. From the File menu, choose New Project.
          ' 2. Copy the code example to the Code window.
          ' 3. Press F5 to run the program.
    
          IF ABS(X! - Y!) <= (X! / 10^7) THEN
             PRINT "Equal within 7 digits"
          ENDIF
    						
  2. Çift duyarlıklı için sınamalısınız olup olmadığını fark x ve Y, X ' küçük değer 15 anlamlı basamağa değerinden küçük veya Y. Bölme X veya Y tarafından 10 ^ 15 karşılaştırma değeri bulmak için. Örneğin:
          ' To try this example in VBDOS.EXE:
          ' 1. From the File menu, choose New Project.
          ' 2. Copy the code example to the Code window.
          ' 3. Press F5 to run the program.
    
          IF ABS(X# - Y#) <= (X# / 10^15) THEN
             PRINT "Equal within 15 digits"
          ENDIF
    						
IEEE kayan nokta biçimi Microsoft QuickBasic Standard ve Professional Edition, Microsoft Visual Basic for MS-DOS sürüm 1.0; <a1>MS-DOS</a1> (yalnızca QB87.EXE işlemcisi sürüm), 3.0, 4.0, 4.0b ve 4.5 sürümleri; Microsoft MS-DOS ve MS OS/2, sürüm 6.0 ve 6.0b; Basic Derleyicisi ve içinde Microsoft temel Professional geliştirme sistemi (PDS) MS-DOS ve MS OS/2 için sürüm 7.0 ve 7.1 bulunamadı.

MBF (Microsoft ikili biçimi), <a1>MS-DOS</a1> (yalnızca QB.EXE olmayan işlemci sürümü), sürüm 1.0, 1.01, 2.0, 2.01 ve 3.0 için Microsoft QuickBasic ve MS-DOS sürüm 3.2, 3.22 ve 3.23 için Microsoft GW-Basic yorumlayıcı bulunamadı.

Bu makaledeki bilgiler standart ve Microsoft Visual Basic Professional sürümleri ile MS-DOS, sürüm 1.0 için sağlanan Yardım dosyası içinde de bulunmaktadır.

Daha fazla bilgi

Not: belirli basamağa hesaplanmış bir sayı aşağıdaki nedeniyle kaybolmuş olabilir: birden çok hesaplama, özellikle toplama değeri uzaklık kadar bir sayı veya sayı değeri benzer çıkarma. Bir sayı sonucu, birden çok hesaplama gelen eşitlik daha az sayıda anlamlı basamağa anlamlı basamağa matematiksel kaybına yansıtacak biçimde kullanmak için sınama değiştirmeniz gerekebilir. Çok fazla anlamlı basamak, sınama, anlamın kullanılıyorsa, sayılar için eşitlik karşılaştırıldığında doğruluğu, olası sınırı içinde gerçekten eşit olduğunu bulmak başarısız olabilir.

IEEE kayan nokta biçimini kullanan yukarıda listelenen temel ürünleri, kaydındaki tek duyarlıklı veya çift duyarlıklı değişkenleri depolanan çok doğruluğunu daha fazla bit olan bir iç 64-bit geçici, ara hesaplamalarda gerçekleştirilir. Bu genellikle hangi durumları ara hesaplama karşılaştırılan ifade eşit olmayan bir hata dönmeden IF deyimini olur. Örneğin:
   X = 25
   Y = 60.1
   IF 1502.5 = (X * Y) THEN PRINT "equal"
				
Yukarıdaki kod çalıştırma "eşit" yazdıracak DEĞIL. Buna ek olarak, bir yer tutucu değişkenini kullanarak aşağıdaki yöntemi "eşit" yazdırılır, ancak hala güvenilir bir yöntem olarak eşitlik için bir sınama değil:
   Z = 25 * 60.1
   IF 1502.5 = Z THEN PRINT "equal"
				
kesin bir sayısal tür bıraktığı Not (! tek kesinlik çift duyarlıklı için #), hesaplamalarında saklanan yazdırılan ve kesinliğini etkiler. Siz çevrim hangi gerçekleştirirseniz, yine de beklenmedik yuvarlama sonuçlar görebilirsiniz:
   PRINT 69.82! + 1    ' Single precision, prints 70.82.
   PRINT 69.82# + 1    ' Double precision, prints 70.81999999999999.
				
bir tam ondalık (10 tabanı) sayısal gösterim için gibi dolar ve cents, hesaplamalar için (@) Visual Basic for MS-DOS sürüm 1.0 ve temel PDS MS-DOS sürüm 7.0 ve 7. 1'için bulunan veri türünü para BIRIMINI kullanmalısınız. CURRENCY veri türü, en çok 19 basamak, 4 basamak ondalık yeri tam olarak depolar.

Başvuru:

MBF hem IEEE standartları, doğruluk ve sayısal aralık ve hızını duyarlık Bakiye çalışıldı. Doğruluk, duyarlık ne kadar önemli bitlerini hesaplamalarında kayboldu ölçer. Duyarlık mantis kaç ondalık basamak gösterileceğini belirleyen bit sayısını gösterir.

IEEE biçiminde hem de MBF y gücüne form 1.x numaralarını depolamak (burada x ve y temel 2 numaraları; x mantis ve y üs ise).

24 Bit mantis MBF tek duyarlıklı varsa ve çift duyarlıklı 56 bit mantis. Tüm MBF hesaplamaları, 24 veya 56 bit içinde gerçekleştirilir.

24 Bit mantis IEEE tek duyarlıklı varsa ve çift duyarlıklı 53 bit mantis. Ancak, büyük doğruluğunu 64-bit geçici kayıttaki tüm tek duyarlıklı ve çift duyarlıklı IEEE hesaplamalarında Visual Basic for MS-DOS sürüm 1.0; MS-DOS, sürüm 3.0/4.x için QuickBasic; için MS-DOS sürüm 6.0 ve 6.0b; Basic Derleyicisi ve temel PDS MS-DOS, sürüm 7.0 ve 7.1re gerçekleştirdi. Sonuç olarak, IEEE MBF hesaplamaları (MBF'ın daha fazla bit çift duyarlıklı temsil yeteneğini karşın daha doğru hesaplamalardır.

Çoğu (10 tabanı) ondalık gösterimle sayıların tam gösterilişinin tek duyarlıklı ve çift duyarlıklı veri türü kullanılan ikili (2 tabanı) kayan noktalı depolama biçiminde sahip DEĞIL. IEEE biçiminde hem de MBF (tam olarak temsil olamaz ve yuvarlama gerekir), form 1.x y gücüne olan tüm sayılar (burada x ve y temel 2 numaraları). Tam olarak temsil edilebilir sayıları çok çeşitli üzerinde dağılmış. 1.0 Ve -1.0, 0. 0'a BIR yüksek yoğunluklu gösterilebilir sayı olan, ancak numaraları 0 veya sonsuz doğru gitme gibi daha az gösterilebilir numaralarını oluşur.

Yukarıdaki sınırlamalar, Basic, kayan noktalı sonuç beklediğinizden farklı dönmek genellikle neden. Bu konu hakkında daha fazla bilgi, Microsoft Knowledge Base'deki aşağıdaki sözcükler üzerinde sorgulayarak bulunabilir:
floating noktası ve biçimi ve QuickBasic
Kayan nokta IEEE biçiminde aşağıdaki el kitapları ' belgelenmiştir:

  1. Sayfaları 16-21, "Microsoft QuickBasic 4.0: temel için Dil Başvurusu" QuickBasic için MS-DOS sürüm 4.0 ve 4.0b. 4.0 El kitaplarını sayfasında 19 MHex $ kod örneği için bir düzeltme Microsoft Knowledge Base'deki aşağıdaki sözcükler üzerinde sorgulayarak bulunan, ayrı bir makalede anlatıldığı gibi gerektiğini unutmayın:
    MHex $ AND 19
  2. Sayfa 12-17, "Microsoft QuickBasic 4.5: temel için Dil Başvurusu" için MS-DOS sürüm 4.5 QuickBasic. Isteğe bağlı bu el kitabında ayrı ayrı sürüm 4.5</a0> ile sağlanan bir siparişi kartı kullanarak sipariş verilmesi gereken olduğunu unutmayın.
  3. Sayfaları 702 705, "Microsoft Basic 7.0: Programmer's Guide" için Microsoft temel PDS sürüm 7.0 ve 7. 1 for MS-DOS,.
MBF kayan nokta biçimi, Microsoft Knowledge Base'deki aşağıdaki sözcükler üzerinde sorgulayarak bulunan, ayrı bir makalede belgelenmiştir:
MBF VE dönüştürme VE üs değeri

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual Basic for MS-DOS
  • Microsoft QuickBasic 4.0
  • Microsoft QuickBASIC 4.0b
  • Microsoft QuickBasic 4.5 for MS-DOS
  • Microsoft BASIC Compiler 6.0
  • Microsoft BASIC Compiler 6.0b
  • Microsoft BASIC Professional Development System 7.0
  • Microsoft BASIC Professional Development System 7.1
  • Microsoft GW-BASIC 3.2
  • Microsoft GW-BASIC 3.22
  • Microsoft GW-BASIC 3.23
Anahtar Kelimeler: 
kbmt kbhowto KB69333 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:69333  (http://support.microsoft.com/kb/69333/en-us/ )
Retired KB ArticleKullanım Dışı Bilgi Bankası İçeriği Yasal Uyarı
Bu makale, Microsoft'un artık destek sağlamadığı ürünler ile ilgili olarak yazılmıştır. Bu nedenle, bu makale "olduğu gibi" sağlanmıştır ve bundan sonra güncelleştirilmeyecektir.