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

  • BiGSH0TROB

    BiGSH0TROB

    7 NİSAN 2011
  • FOSDEM

    FOSDEM

    13 Ocak 2009
  • Moto Journal

    Moto Journal

    28 Mayıs 2007