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
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 !!
Ne kadar tehlikeli bir kayan nokta değ...
Şimdiye kadar *OK* ücretsiz kullanım()...
şimdiye kadar anlayamıyorum scala...
Nasıl Java 2 ondalık basamaklı kayan n...
Ne kadar güzel gereksiz ondalık 0 olma...