2016-03-31 21 views
-4

özel bir durumda Ben iki değişkente 0.068404 sayısı var (program çalışırken bu değişiklik var, bu yüzden içinde ne olduğunu bilmiyorum).Bir sayı eksi sonsuz sınırsız

Tek başına işten çıkarırken, güçte sonsuz veya kesin bir sayı verir9. Tüm booleanlar operasyonları bana yanlış bir sonuç veriyor.

Herhangi bir fikrin var mı?

+0

Bu çok sıfıra yakın sadece kayan nokta temsilidir. Sonsuz değil, sadece çok küçük. Bahsettiğiniz "-9", "10^-9" ve bu sayının bilimsel gösterimidir. –

+0

Eşitlik için kayan nokta sayılarını karşılaştırmamalısınız. Kayan nokta [inexact] (https://isocpp.org/wiki/faq/newbie#floating-point-arith) – PaulMcKenzie

+0

Ama 0 vermeli, garip! 0 ile 1 arasında bir sayı ile çarpmadığımda (vektör uzunluğunu değiştirmek için) – Render

cevap

3

Büyük olasılıkla zamanla ve saatte ele alınan çok yaygın bir sorun olan kayan nokta yuvarlama sorunlarıyla karşılaşıyorsunuz. Eğer 0 1 dışında bir baskı almalısınız tüm hakları ifadesiyle

float a, b, c; 

cin >> a; 
b = a; 
a = a*3; 
a = a/3; 
c = a - b; 
cout << c << " " << (c == 0) << endl; 

ancak here denemek zaman: Aşağıdaki programı ele alalım. Sen olsun:

2.48353e-09 0 

kayan nokta sayıları her taban 10 sayısını temsil edemez, çünkü bu, bu yüzden yuvarlama hataları düz karşılaştırmalar kötü bir fikir olun.

abs(a - b) < eps 

eps 1e-6 gibi bir şey: Daima epsilonu, yani kullanmalıdır.

Here you can find many more examples.

+0

Tamam teşekkürler! İlk defa 5 yıldır bu konuyla ilgileniyorum. – Render

+0

@Render tekrar teşekkürler, bu konuda ayrıntılı olarak sürece kapalı olacaktır. Somut bir örnek vermeli ve sonra bu cevabı kabul etmelisiniz. –