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

  • Lin Steven

    Lin Steven

    17 EKİM 2006
  • Tina Chen

    Tina Chen

    26 Mayıs 2012
  • TotalSeminarsChannel

    TotalSeminar

    16 Mart 2010