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

  • Break

    Break

    10 Aralık 2005
  • HTC Tutorials

    HTC Tutorial

    21 EYLÜL 2010
  • MovieZoneET

    MovieZoneET

    22 Aralık 2009