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

  • KIT KAT

    KIT KAT

    3 EKİM 2005
  • Tire Rack

    Tire Rack

    31 Mayıs 2007
  • Visual Life

    Visual Life

    3 Temmuz 2006