Excel'de kayan nokta hesaplamaları tutarsız sonuçlar verebilir

Makale çevirileri Makale çevirileri
Makale numarası: 78113 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Bu makalede, Microsoft Excel'in kayan noktalı sayıları nasıl sakladığı ve hesapladığı anlatılır. Bu işlem, yuvarlama ve/veya verilerin kesilmesi nedeniyle bazı sayıların veya formüllerin sonuçlarını etkileyebilir.

Genel Bakış

Microsoft Excel, kayan noktalı sayıların saklanması ve hesaplanması bakımından IEEE 754 belirtimine uygun olarak tasarlanmıştır. IEEE, diğer görevlerinin yanı sıra bilgisayar yazılımları ve donanımlarına yönelik standartları belirleyen uluslararası bir kuruluş olan Institute of Electrical and Electronics Engineers'ın kısaltmasıdır. 754 belirtimi yaygın olarak kullanılan ve ikili düzen tabanlı bilgisayarlarda kayan noktalı sayıların nasıl saklanması gerektiğini açıklayan bir belirtimdir. Yaygın olarak kullanılmasının nedeni, kayan noktalı sayıların kabul edilebilir boyutta bir alanda saklanmasına ve hesaplamaların göreli olarak hızlı gerçekleştirilmesine olanak vermesidir. 754 standardı, günümüzde Intel, Motorola, Sun ve MIPS işlemcileri gibi kayan noktalı hesaplamalar yapan PC tabanlı mikroişlemcilerin neredeyse tümündeki sayısal veri işlemcilerinde ve kayan noktalı işlem birimlerinde kullanılır.

Sayılar saklanırken, her bir sayıya veya kesirli sayıya karşılık gelen bir ikili sayı kullanılır. Örneğin 1/10 değeri, ondalık sayı sisteminde 0,1 olarak gösterilebilir. Ancak aynı sayı ikili düzende yinelenen ikili ondalık değeri haline gelir
0001100110011100110011 (bu şekilde devam eder)
ve sonsuza kadar yinelenebilir. Bu sayı sonlu (sınırlı) bir alanda gösterilemez. Bu nedenle de bu sayı, aşağı doğru yaklaşık bir değere yuvarlanarak 2,8E-17 olarak saklanır.

Ancak IEEE 754 belirtiminde üç genel kategoride özetlenebilecek bazı kısıtlamalar bulunmaktadır:
  • en büyük/en küçük kısıtlamaları
  • duyarlık
  • yinelenen ikili sayılar

Daha fazla bilgi

En Büyük/En Küçük Kısıtlamaları

Her bilgisayarın işleyebileceği en büyük ve en küçük sayı bellidir. Sayının saklanacağı belleğin bit sayısı sonsuz olmadığı için, saklanabilecek en büyük veya en küçük sayı da sonsuz değildir. Excel'de saklanabilecek en büyük sayı 1,79769313486232E+308 ve en küçük pozitif sayı 2,2250738585072E-308 değeridir.

IEEE 754'e Bağlı Kalınan Durumlar

  • Yetersizlik durumu: Yetersizlik durumu, gösterilemeyecek kadar küçük bir sayı oluşturulduğunda ortaya çıkar. IEEE'de ve Excel'de sonuç 0'dır (tek özel durum, IEEE'de -0 kavramının kullanılması, ancak Excel'de kullanılmamasıdır).
  • Taşma durumu: Taşma durumu, gösterilemeyecek kadar büyük bir sayı için ortaya çıkar. Excel bu durumda kendi özel gösterimini (#SAYI!) kullanır.

IEEE 754'e Bağlı Kalınmayan Durumlar

  • Normalleştirilmemiş sayılar: Normalleştirilmemiş sayı, 0'ın üs değeri olarak gösterilir. Bu durumda, sayının tamamı mantiste saklanır ve mantisin başında 1 örtülü değeri olmaz. Dolayısıyla duyarlık kaybolur, sayı ne kadar küçükse duyarlık da o kadar çok kaybolur. Bu aralığın küçük ucundaki sayıların duyarlığı tek basamaklıdır.
    Örneğin: Normalleştirilmiş sayıda 1 örtülü değeri bulunur. Örneğin mantiste 0011001 gösteriliyorsa, en başta 1 örtülü değeri olacağı için normalleştirilmiş sayı 10011001 halini alır. Normalleştirilmemiş sayının başında 1 örtülü değeri yoktur; dolayısıyla 0011001 örneğinde, normalleştirilmemiş sayı aynı kalır. Bu durumda, normalleştirilmiş sayıda sekiz anlamlı basamak (10011001) bulunur; normalleştirilmemiş sayıda ise baştaki sıfırlar anlamsız olduğu için beş anlamlı basamak (11001) bulunur.

    Normalleştirilmemiş sayılar temelde normal alt sınırdan daha küçük sayıların saklanmasına olanak veren bir geçici çözümdür. Microsoft, belirtimin isteğe bağlı olan bu bölümünü uygulamaz, çünkü normalleştirilmemiş sayılar yapıları gereği değişken sayıda anlamlı basamağa sahip olabilir. Bu da hesaplamalarda önemli hatalara neden olabilir.
  • Pozitif/Negatif Sonsuz Sayılar: Sonsuz sayılar 0 ile bölme sonucunda oluşur. Excel sonsuz sayıları desteklemez, bu gibi durumlarda #SAYI/0! hatası verir.
  • Sayı Değil (NaN): NaN, geçersiz işlemleri göstermek için kullanılır (sonsuz/sonsuz, sonsuz-sonsuz veya -1'in kare kökü gibi). NaN'ler bir programın geçersiz bir işlemden sonra devam edebilmesini sağlar. Excel bunun yerine hemen #SAYI! veya #SAYI/0! gibi bir hata oluşturur.

Duyarlık

Kayan noktalı sayı, ikili düzende 65 bit aralığında üç bölüm olarak saklanır: işaret, üs değeri ve mantis.
Bu tabloyu kapaBu tabloyu aç
1 İşaret Biti11 Bit Üs Değeri1 Örtülü Bit52 Bit Mantis
İşaret, sayının işaretini (pozitif veya negatif); üs değeri, sayının 2'nin katları olarak arttırılacağı veya azaltılacağı üs değerini (2'nin en büyük/en küçük üs değeri +1.023 ve -1.022'dir); mantis ise asıl sayıyı saklar. Mantisin sonlu saklama alanı, birbirine komşu iki kayan noktalı sayının ne kadar yakın olabileceğini (yani, duyarlığını) kısıtlar.

Mantis ve üs değeri ayrı bileşenler olarak saklanır. Dolayısıyla, duyarlık miktarı, söz konusu sayının boyutuna (mantisine) bağlı olarak değişebilir. Excel'de 1,79769313486232E308 ile 2,2250738585072E-308 arasındaki sayılar saklanabilir, ancak bu işlem yalnızca 15 basamaklı bir duyarlıkla yapılabilir. Bu kısıtlama, IEEE 754 belirtiminin kesin olarak izlenmesi nedeniyle oluşur ve Excel'in bir kısıtlaması değildir. Bu duyarlık düzeyi diğer elektronik tablo programlarında da bulunmaktadır.

Kayan noktalı sayılar şu biçimde gösterilir; burada üs değeri, ikili üs değeridir:
X = Kesir * 2^(üs değeri - sapma)
Kesir, sayının normalleştirilmiş kesirli bölümüdür; normalleştirilmiş olmasının nedeni, üs değerinin ilk bit her zaman 1 olacak şekilde ayarlanmasıdır. Böylece, ilk bit değerinin saklanması gerekmeyeceğinden, bir bit daha fazla duyarlık sağlanır. İşte bu nedenle de örtülü bir değeri vardır. Bu, üs değerinin ondalık ayırıcının bir basamak solunda kullanıldığı bilimsel gösterime benzer; ancak ikili düzende yalnızca 1'ler ve 0'lar olacağından, üs değerini ilk bit her zaman 1 olacak şekilde uygulayabilirsiniz.

Sapma, negatif üs değerlerinin saklanmasını önlemek için kullanılan sapma değeridir. Tek duyarlıklı sayıların sapması 127, çift duyarlıklı sayıların sapması ise 1,023'tür (bunlar ondalık değerlerdir). Excel, sayıları çift duyarlıklı olarak saklar.

Çok Büyük Sayılar Kullanmaya Örnek

Aşağıdaki verileri yeni bir çalışma kitabına girin:
   A1: 1,2E+200
   B1: 1E+100
   C1: =A1+B1
C1 hücresindeki hesaplanan değer 1,2E+200 (A1 hücresiyle aynı) olacaktır. Örneğin EĞER(A1=C1) şeklinde EĞER işlevini kullanarak A1 ve C1 hücrelerini karşılaştırırsanız, sonuç DOĞRU olacaktır. Bunun nedeni, IEEE belirtiminin sayıları yalnızca 15 basamaklı bir duyarlıkla saklamasıdır. Yukarıdaki hesaplamanın saklanabilmesi için, Excel en az 100 basamaklı duyarlık gerektirir.

Çok Küçük Sayılar Kullanmaya Örnek

Aşağıdaki verileri yeni bir çalışma kitabına girin:
   A1: 0,000123456789012345
   B1: 1
   C1: =A1+B1
C1 hücresindeki hesaplanan değer 1,000123456789012345 değil, 1,00012345678901 olacaktır. Bunun nedeni, IEEE belirtiminin sayıları yalnızca 15 basamaklı bir duyarlıkla saklamasıdır. Yukarıdaki hesaplamanın saklanabilmesi için, Excel en az 19 basamaklı duyarlık gerektirir.

Duyarlık Hatalarını Düzeltme

Excel, yuvarlama hatalarını gidermek için iki temel yöntem sunar: YUVARLA işlevi ve Duyarlılık görüntülendiği gibi veya Duyarlığı göründüğü gibi ayarla çalışma kitabı seçeneği.

Yöntem 1: YUVARLA İşlevi

Yukarıdaki verilerin kullanıldığı şu örnekte, YUVARLA işlevi kullanılarak bir sayı beş basamağa zorlanır. Böylece sonuç başka bir değerle karşılaştırılabilir.
   A1: 1,2E+200
   B1: 1E+100
   C1: =YUVARLA(A1+B1;5)
1,2E+200 sonucunu verir.
   D1: =EĞER(C1=1,2E+200; DOĞRU; YANLIŞ)
DOĞRU sonucunu verir.

Yöntem 2: Duyarlılık Görüntülendiği Gibi

Bazı durumlarda Duyarlılık görüntülendiği gibi seçeneğini kullanarak, yuvarlama hatalarının çalışmanızı etkilemesini önleyebilirsiniz. Bu seçenek, çalışma sayfasındaki her sayıyı görüntülenen değere sahip olmaya zorlar. Bu seçeneği etkinleştirmek için şu adımları izleyin:
  1. Excel 2003 ve önceki sürümlerinde, Araçlar menüsünde Seçenekler'i tıklatın.
  2. Hesaplama sekmesinde, Duyarlılık görüntülendiği gibi onay kutusunu tıklatıp seçin.
  1. Excel 2007'de, Microsoft Office Düğmesi'ni tıklatın, Excel Seçenekleri'ni tıklatın ve sonra da Gelişmiş kategorisini tıklatın.
  2. Bu çalışma kitabını hesaplarken bölümünde, istediğiniz çalışma kitabını ve sonra da Duyarlığı göründüğü gibi ayarla onay kutusunu seçin.
Örneğin, iki ondalık basamak gösterilen bir sayı biçimi seçip Duyarlılık görüntülendiği gibi seçeneğini etkinleştirirseniz, çalışma kitabınızı kaydettiğinizde iki basamağın ötesindeki tüm duyarlık kaybolur. Bu seçenek tüm çalışma sayfaları da dahil etkin çalışma kitabını etkiler. Bu seçeneği geri alamaz ve kaybolan verileri kurtaramazsınız. Bu seçeneği etkinleştirmeden önce çalışma kitabınızı kaydetmeniz önerilir.

Yinelenen İkili Sayılar ve Sıfıra Yakın Sonuçlu Hesaplamalar

Kayan noktalı sayıları ikili düzende saklama ile ilgili bir başka sorun da, ondalık düzende sonlu olan bazı yinelenmeyen sayıların ikili düzende sonsuz olan yinelenen sayılar olmasıdır. Bunun en yaygın örneği 0,1 değeri ve benzerleridir. Bu sayılar ondalık düzende düzgün biçimde gösterilebilmesine karşın, aynı sayı mantiste saklandığında, ikili düzende şu yinelenen ikili sayı haline gelir:
000110011001100110011 (bu şekilde devam eder)
IEEE 754 belirtimi hiçbir sayı için özel bir çözüm sağlamaz; saklayabildiği kadarını mantiste saklar, geri kalanı keser. Bu durum, saklamada -2,8E-17 veya 0,000000000000000028 kadar bir hataya neden olur.

0,0001 ondalık değeri gibi sık kullanılan ondalık kesirler bile ikili düzende tam olarak gösterilemez. (0,0001, noktadan sonra 104 bit içeren bir yinelenen ikili düzen kesridir). Bu, 1/3 kesrinin ondalık düzende tam olarak gösterilememesine benzer (0,33333333333333333333 değeri yinelenir).

Bu durumda, Microsoft Visual Basic for Applications'ta şu basit örneğin neden
   Sub Main()
      MySum = 0
      For I% = 1 To 10000
         MySum = MySum + 0,0001
      Next I%
      Debug.Print MySum
   End Sub
çıkış olarak 0,999999999999996 değerini verdiğini açıklar. 0,0001 değerini ikili düzende gösterirken ortaya çıkan küçük hata, toplamı etkiler.

Negatif Sayı Ekleme Örneği

  1. Şu formülü yeni bir çalışma kitabına girin:
       A1: =(43,1-43,2)+1
  2. A1 hücresini sağ tıklatın ve sonra da Hücreleri Biçimlendir'i tıklatın. Sayı sekmesinde, Kategori altında Bilimsel'i tıklatın. Ondalık basamak sayısı değerini 15 olarak ayarlayın.
Excel, 0,9 yerine 0,899999999999999 değerini görüntüler. İlk olarak (43,1-43,2) hesaplandığı için, -0,1 geçici olarak saklanır ve -0,1 değerinin saklanması nedeniyle oluşan hata, hesaplama sonucunu etkiler.

Değerin Sıfıra Ulaşması Örneği

  1. Excel 95 veya önceki sürümlerde, şu formülü yeni bir çalışma kitabına girin:
       A1: =1,333+1,225-1,333-1,225
  2. A1 hücresini sağ tıklatın ve sonra da Hücreleri Biçimlendir'i tıklatın. Sayı sekmesinde, Kategori altında Bilimsel'i tıklatın. Ondalık basamak sayısı değerini 15 olarak ayarlayın.
Excel, 0 değeri yerine -2,22044604925031E-16 değerini görüntüler.

Ancak Excel 97'de, bu sorunu düzeltmek üzere bir iyileştirme kullanılmaya başlandı. Excel 97 ve sonrasında bir toplama veya çıkarma işlemi sıfır ya da sıfıra çok yakın bir değer verdiğinde, işlenen değeri ikili düzene veya ikili düzenden dönüştürme sonucunda oluşan hatalar giderilir. Yukarıdaki örnek Excel 97 ve sonrasında uygulandığında bilimsel gösterimde 0 veya 0,000000000000000E+00 değeri görüntülenir. Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleleri görüntülemek üzere aşağıdaki makale numaralarını tıklatın:
172911 10'un çok büyük veya çok küçük bir üs değeri alındığında sonuç hatalı oluyor (Bu bağlantı, bir kısmı veya tamamı İngilizce olan içeriğe işaret edebilir)
214373 10'un çok büyük veya çok küçük bir üs değeri alındığında sonuç hatalı oluyor (Bu bağlantı, bir kısmı veya tamamı İngilizce olan içeriğe işaret edebilir)
Kayan noktalı sayılar ve IEEE 754 belirtimi hakkında daha fazla bilgi için, lütfen şu World Wide Web sitelerine bakın:
http://www.ieee.org

http://stevehollasch.com/cgindex/coding/ieeefloat.html

Referanslar

Bu hatalara geçici çözüm bulma hakkında daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
214118 Kayan nokta hesaplamalarında yuvarlama hatalarını düzeltme (Bu bağlantı, bir kısmı veya tamamı İngilizce olan içeriğe işaret edebilir)

Özellikler

Makale numarası: 78113 - Last Review: 13 Mayıs 2010 Perşembe - Gözden geçirme: 7.0
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Office Excel 2007
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Excel 95 Standard Edition
  • Microsoft Excel 2004 for Mac
  • Microsoft Excel X for Mac
  • Microsoft Excel 2001 for Macintosh
  • Microsoft Excel 98 for Macintosh
Anahtar Kelimeler: 
kbinfo KB78113

Geri Bildirim Ver

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com