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

  • bobinire

    bobinire

    24 EYLÜL 2006
  • steeletraining

    steeletraini

    28 NİSAN 2010
  • tseyina

    tseyina

    2 AĞUSTOS 2006