SORU
13 Ocak 2011, PERŞEMBE


Kayan noktalı == şimdiye kadar iyi mi?

Sadece bugün kullandığımız üçüncü parti bir yazılım ile karşılaştım ve örnek kodu bu satırlar boyunca bir şey vardı:

// defined in somewhere.h
static const double BAR = 3.14;

// code elsewhere.cpp
void foo(double d)
{
    if (d == BAR)
        ...
}

Kayan noktaları ve onların temsil sorunu olduğunun farkındayım, ama eğer bana float == float güzel olurdu durumlar varsa merak ediyorum? O zaman sormuyorumolabilirmantıklı ve çalışırken iş ama.

Ayrıca, ne foo(BAR) gibi bir ara? Bu her zaman onlar 6* *aynı iki eşit karşılaştırmak olacak?

CEVAP
13 Ocak 2011, PERŞEMBE


Evet, tam sayılar, 0.0, = = ile karşılaştırma da dahil olmak üzere garanti edilir

Tabii ki en başta bütün aradım biraz dikkatli olmak zorunda, atama güvenli olduğunu, ancak herhangi bir hesaplamanın sonucu şüpheli

ps var kümesi gerçek sayılar olan bir mükemmel üreme kanallarla (sanırım 1/2, 1/4 1/8 vb.) ama muhtemelen bilmiyorum önceden var bunlardan.

Sadece netleştirmek için. Aralıktaki tam sayılar (tam sayılar) representions, tam yüzer IEEE 754 tarafından garanti edilir.

float a=1.0;
float b=1.0;
a==b  // true

Ama bütün numaraları nasıl dikkatli olmak zorunda

float a=1.0/3.0;
a*3.0 == 1.0  // not true !!

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Exalto_Gamer

    Exalto_Gamer

    15 EKİM 2014
  • Attempts at least

    Attempts at

    1 Ocak 2007
  • Plugable

    Plugable

    19 Mayıs 2010