SORU
12 ŞUBAT 2015, PERŞEMBE


İki eşit olmayan kayan nokta sayı çıkararak 0 almak mümkün müdür?

Aşağıdaki örnekte 0 (veya sonsuzluk) ile bölme almak mümkün müdür?

public double calculation(double a, double b)
{
     if (a == b)
     {
         return 0;
     }
     else
     {
         return 2 / (a - b);
     }
}

Normal durumlarda, tabii ki olmaz. Ama eğer a b çok yakın (a-b) 0 hesaplama hassasiyeti nedeniyle neden ne olabilir?

Bu soruyu Java için, ama çoğu programlama dilleri için geçerli olacak sanırım unutmayın.

CEVAP
12 ŞUBAT 2015, PERŞEMBE


Java a != b asla 0 eşittir. Bu Java görev normal dışı sayıları destekleyen 754 kayan nokta işlemleri IEEE çünkü. spec:

Özellikle Java programlama dili kayan noktalı sayılar ve daha kolay istenilen özelliklerin kanıtlamak için kademeli yetersizlik durumu, özellikle sayısal algoritmalarının IEEE 754 normal dışı destek gerektirir. Kayan nokta işlemi "sıfır floş hesaplanan sonuç" normal dışı bir sayıdır.

denormalized numbers, eşit olmayan bir sayı hiçbir zaman sıfır (çarpma aksine) üretebilir çıkararak, eğer bir FPU çalışmalar this question bkz.

Diğer diller için, duruma göre değişir. Örneğin C veya C , IEEE 754 desteği isteğe bağlıdır.

Bu, it is possible ifade a = 5e-308 b = 4e-308 ile örneğin taşma 2 / (a - b) dedi.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • lilstevie89

    lilstevie89

    25 Mart 2011
  • Maya Learning Channel

    Maya Learnin

    23 HAZİRAN 2010
  • WePlayWeWatch

    WePlayWeWatc

    3 Temmuz 2013