Makale numarası: 42980 - Son Gözden Geçirme: 16 Ağustos 2005 Salı - Gözden geçirme: 3.1 (Tamamlar) Kayan nokta hatalarını IEEE öğrenin için Öğreticisi
Bu SayfadaÖzetKayan nokta matematiğini fazla programcılar confuses karmaşık bir konudur. Öğretici aşağıdaki programlama durumlarda kayan nokta hatalarını nerede oluşabilir ve bunları nasıl yardımcı olmalıdır. Bu ayrıca, gerçek bir derleyici hataları karşıt olarak devralınan bir kayan nokta matematik sınırlamaları nedeniyle, servis taleplerini tanıması izin vermelisiniz. Daha fazla bilgiOndalık ve ikili sayı sistemleriNormal olarak, temel 10 şey say. Tümüyle rasgele tabanıdır. Kişilerin Geleneksel olarak temel 10 kullandığınız tek nedeni, kullanışlı bir sayım araçları yaptınız ve 10 fingers olduğunu olur.Ondalık (10 tabanı) sayı 532.25 aşağıdaki oldu?u anlam?na gelir:
(5 * 10^2) + (3 * 10^1) + (2 * 10^0) + (2 * 10^-1) + (5 * 10^-2)
500 + 30 + 2 + 2/10 + 5/100
_________
= 532.25
Ikili sayı sisteminde (2 tabanı), her sütun yerine, 10, 2'in üssü temsil eder. Örneğin, 101.01 numarasını aşağıdaki anlam?na gelir:
(1 * 2^2) + (0 * 2^1) + (1 * 2^0) + (0 * 2^-1) + (1 * 2^-2)
4 + 0 + 1 + 0 + 1/4
_________
= 5.25 Decimal
Tamsayılar bilgisayarların nasıl gösterilirHiçbir kesirli bölümü için bir tamsayı olduğundan, makine gösterimi için kayan noktalı değer olandan çok daha kolaydır. Normal (bilgisayarlar) kişisel bilgisayarlarda 2 baytlık (16 bit) işareti gösteren uzun en anlamlı bit tamsayılardır. 4 Bayt uzunluğunda tamsayılardır. Basit bir ikili sayı pozitif değerlerdir. Örneğin,:
1 Decimal = 1 Binary
2 Decimal = 10 Binary
22 Decimal = 10110 Binary, etc.
Ancak, negatif tamsayılara iki bilgisayarın tamamlayıcı düzeni kullanılarak temsil edilir. Iki bilgisayarın tamamlayıcı gösterimi negatif bir sayı elde etmek için <a0></a0>, numarasını, bilgisayarın mutlak değeri için bir ikili gösterimini alır ve tüm bit çevirme ve 1 ekleyin. Örneğin,:
4 Decimal = 0000 0000 0000 0100
1111 1111 1111 1011 Flip the Bits
-4 = 1111 1111 1111 1100 Add 1
Bu -1 Not ondalık 1111 1111 = neden Basic -1 mantıksal doğru olarak nitelendirir açıklar, ikili, 1111 1111 (tüm bitleri = 1). Bu karşılaştırmalar, bitwise ve mantıksal işleçleri ayrı sahip bir sonucu olacaktır. Genellikle Basic'te kod parçası olduğunda çok sayıda mantıksal karşılaştırmalar programınızı yapacak aşağıda kullanmak uygun olur. Bu büyük ölçüde yardımlar okunabilirlik. CONST TRUE = -1 CONST FALSE = NOT TRUE Iki bilgisayarın herhangi bir birleşimi ekleme sıradan ikili aritmetik kullanarak sayıları tamamlayıcı Not doğru sonuç üretir. Floating-Point zorluklarHer bir ondalık tamsayı ikili bir tamsayı tam olarak gösterilebilir; ancak bu kesirli sayılar için doğru değil. Aslında, 10 tabanına ırrational her sayı de ırrational herhangi bir sistem ile temel 10'dan daha küçük olur.Ikili için özellikle, the form p/q 2 bir tamsayı güç olduğu q içinde gösterilebilen yalnızca kesirli sayı tam olarak sınırlı bir bit sayısı ile ifade edilebilir. 0,0001 ondalık değeri gibi sık kullanılan ondalık kesirler bile ikili düzende tam olarak gösterilemez. (nokta 104 bit yinelenen ikili bir kesir 0.0001 olur!) Bu basit bir örnek neden, aşağıdaki gibi açıklar
SUM = 0
FOR I% = 1 TO 10000
SUM = SUM + 0.0001
NEXT I%
PRINT SUM ' Theoretically = 1.0.
PRINT 1.000054 çıktı verir. 0,0001 değerini ikili düzende gösterirken ortaya çıkan küçük hata, toplamı etkiler. Aynı nedenle, her zaman karşılaştırmaları reel sayılar üzerinde yaparken çok dikkatli olmalısınız. Aşağıdaki örnekte, ortak bir programlama hatası gösterilmektedir: item1# = 69.82# item2# = 69.20# + 0.62# IF item1# = item2# then print "Equality!" (Ikili sistemde) BIRAZ farklı atama kaynaklanır değeri neden tam olarak ikili düzende, 69.82 gösterilemez çünkü bu "Eşitlik!" PRINT NOT değerden deyim oluşturulur. Uygulamada, her zaman bazı toleransını izin verecek şekilde şekilde tür karşılaştırmalarda kodu. Örneğin,: IF (item1# < 69.83#) AND (item1# > 69.81#) then print "Equal" Bu, "Eşit" PRINT. IEEE biçim numaralarıMS-DOS sürüm 3.0 için QuickBasic bir MBF (Microsoft ikili kayan nokta) sürümünü ve bir IEEE (ınstitute of Electrical and Electronics Engineers) sürümünü matematik işlemcisi ile makineler için sevk. MS-DOS için QuickBasic, 4.0 ve sonraki sürümler IEEE kullanmalısınız. Microsoft, kayan nokta temel geçerli sürümlerinde aşağıdaki üç birincil nedenlerle göstermek için IEEE standart seçtiniz:
Sign Bits Exponent Bits Mantissa Bits
--------- ------------- -------------
IEEE 1 11 52 + 1 (Implied)
MBF 1 8 56
IEEE ve MBF kayan noktalı gösterimi, <a1>sorgu</a1> Microsoft Knowledge Base'de bulunan aşağıdaki sözcükler arasındaki farklar hakkında daha fazla bilgi için: IEEE and floating and point and appnote IEEE sağlayan daha geniş bir aralıkta bulunan değerleri temsil etmek için üs değeri için ayrılmış olan daha fazla bit olduğunu unutmayın. Dar, aralık içinde daha kesin olmasını sağlayan daha fazla mantis bitleri, MBF var. Kayan nokta olan genel kavramlarKayan noktalı değer tam formunda yalnızca sınırlı sayıda ikili herhangi bir kayan nokta sistemi temsil edebilir gerçekleştirmek çok önemlidir. Diğer tüm değerler en yakın gösterilebilir değeriyle yaklaşık gerekir. IEEE) standardı, değerleri "en yakın" gösterilebilir değere yuvarlama yöntemi belirtir. MS-DOS için QuickBasic standardını destekler ve IEEE kurallarına göre yuvarlar.Ayrıca, sayıları IEEE temsil edilebilir çok çeşitli üzerinde dağılmış göz önünde bulundurun. Bunları bir numarası satırına düşünün. Bir yüksek yoğunluklu 1.0 ve -1.0, 0. 0'a yakın gösterilebilir numaraları yoktur, ancak daha az olarak 0 veya sonsuz doğru gidin. Hesaplamalar mühendislik için tasarlanmış olan, IEEE standart amacı doğruluğunu en üst düzeye çıkarmak için olan (almak için olabildiğince fiili olarak yakın numarası). Duyarlık için temsil edebilen basamak sayısını gösterir. Standart IEEE bit üs için ayrılmış doğruluğu hem de duyarlık kabul edilebilir sınırlar içinde tutmak için sayının kesirli kısmı için kullanılan bit sayısı ile bakiyelendirmek çalışır. IEEE ayrıntılarıKayan noktalı sayıların burada [] ikili üs üstür aşağıdaki formunda gösterilir:X = Fraction * 2^(exponent - bias) [Kesir] üs, önde gelen kill bitini her zaman 1 olacak şekilde ayarlanır, çünkü normalleştirilmiş sayının normalleştirilmiş kesirli bölümü var. Bu şekilde, depolanması gerekmez ve duyarlık bir daha fazla bit alın. İşte bu nedenle de örtülü bir değeri vardır. Bu gibi bilimsel gösterimde, burada ikili düzende, olması dışında bir rakam, ondalık virgülün solunda üs değeri'ni değiştirmek yalnızca 1s ve 0s olduğundan ilk bit 1, böylece her zaman üs işleyebileceğiniz düşünebilirsiniz. [sapma], negatif üs sayıların saklamak zorunda kalmamak için kullanılan sapma değeridir. Tek duyarlıklı sayıların sapma 127 ve çift duyarlıklı sayılar için (ondalık) 1023 ' dir. Değerleri tüm 0'ın eşit ve hepsi 1'lerin (ikili) özel durumlar temsil eden için rezerve edilir. Çeşitli hata durumlarını gösteren diğer özel durumlar gibi vardır. Tek duyarlığı örnekleri2 = 1 * 2 ^ 1 0100 0000 = 0000 0000 0000-0000, 4000-0000-hex =<a1>Not</a1> biti sıfırdır ve saklı ikili, 128 veya 100 0000 0 127 artı 1 olduğu üstür. (1) 000 Saklı mantis ise asıl mantis 1 olacak şekilde... 0000 örtülü bir satır 1 ve ikili olan 0000 0000, işaretleyin. -2 = -1 * 2 ^ 1 1100 0000 = 0000 0000 0000-0000 C000 0000 hex = Aynı + 2 biti ayarlanmış olmasıdır. Bu, tüm IEEE kayan noktalı sayıları biçimlendirme için geçerlidir. 4 = 1 * 2 ^ 2 0100 0000 = 1000 0000 0000-0000 4080 0000 hex = Aynı mantis, tek (ağırlıklı ikili 129 veya 100 0000 1 değeridir. üs değeri artırır. 6 = 1.5 * 2 ^ 2 0100 0000 = 1100 0000 0000-0000, 40 = 0 C 0000 hex Aynı üs değeri mantis yarı göre daha büyük--(1) 100 Günlerden 0000... Bu ikili bir kesir olduğundan olan, 1-1/2 0000 0000 (ondalık basamakların değerlerdir 1/2, 1/4, 1/8, vs.). 1 = 1 * 2 ^ 0 0011 1111 = 1000 0000 0000-0000 3F80 0000 hex = Mantis aynı üs değeri olarak başka tabanların 2 olan bir ikili dosyada 127 veya 011 1111 1, 2'den daha az. .75 = 1.5 * 2 ^ -1 = 0011 1111 0100 0000 0000-0000 3F40 0000 hex = Eğimli üstür 126, 011 1111 0 içinde ikili mantis ise (1) 100 0000... 1-1/2 0000 0000. 2,5 = 1.25 * 2 ^ 1 0100 0000 = 0010 0000 0000-0000 4020 0000 hex = Tam olarak aynı 2, hariç, 1/4 temsil eden bit mantis ayarlanır. 1.6 = 0, 1 * 2 ^ -4 = 0011 1101 1100 1100 1100 1101 3DCC CCCD hex = 1/10 ikili düzende yinelenen bir kesir ' dir. Mantis 1.6 yalnızca shy; ağırlıklı üs 1.6 16 göre bölünür olduğunu belirten (011 1101 olarak 123 ondalık olan ikili, 1). Doğru üstür 123-127 = - 4 ile çarpmak faktör 2 ** -4 = 1/16 oldu?u anlam?na gelir. Not saklı mantis son kill bitini yukarı yuvarlanır. Olası doğru unrepresentable numarayı temsil eden denemesi budur. (Bunun nedeni, 1/10 ve 1/100 ikili düzende tam olarak gösterilebilir benzer şekilde, 1/3 ondalık düzende tam olarak gösterilebilir olduğunu,.) 0 = 1.0 * 2 ^-128 tümüyle sıfırlardan--özel bir durum =. Diğer ortak kayan nokta hatasıKayan nokta olan sık karşılaşılan hatalar şunlardır:
Bu makaledeki bilginin uygulandığı durum:
Otomatik 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:42980
(http://support.microsoft.com/kb/42980/en-us/
)
| Diğer Kaynaklar Diğer Destek Siteleri
ToplulukHemen Yardım AlMakale çevirileri
|






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email



Üste