Kullanarak "çift" döngüler olarak sayaç değişkenleri
Okumakta olduğum bir kitapta bir alıntı vardır:
Ayrıca kayan noktalı kullanabilirsiniz bir döngü sayacı olarak değer. Burada bir ... ... bu tür
for
bir döngü örneği sayaç:double a(0.3), b(2.5); for(double x = 0.0; x <= 2.0; x = 0.25) cout << "\n\tx = " << x << "\ta*x b = " << a*x b;
Bu kod parçası hesaplar *5 değerleri için
a*x b
değer* adım2.0
0.0
0.25
; ancak, yapılması gereken bakım bir kayan nokta sayacı kullanırken bir döngü. Birçok ondalık değerler olamaz temsil ikili düzende tam olarak kayan nokta şeklinde, tutarsızlık yani toplu değerlerle inşa edebilir. Bu bir kod gerektiği anlamına gelir döngü sonu böyle döngü için kayan noktalı bir döngü bağlıdır kesin bir değer ulaşan sayacı. İçin örneğin, aşağıdaki kötü tasarlanmış döngü hiç bitmez:for(double x = 0.0 ; x != 1.0 ; x = 0.2) cout << x;
Bu döngü ile niyet etmektir çıkış değişir gibi
x
değeri1.0
;, 13 **ancak0.0
bir olarak kesin bir gösterimi var ikili kayan nokta değeri,x
değeri asla tam olarak1
. Böylece, ikinci döngü denetimi her zaman ifade yanlış. döngü sonsuza kadar devam eder.
Birisi ikinci değil, ilk kod bloğu çalışır nasıl açıklayabilir?
CEVAP
İlk sonunda eğer x
ulaşmıyor bile sonlandırabilirtam olarakOlmuyor. çünkü 2.0...daha fazla2.0 ve böylece patlak daha.
İkincisi x
hit yapmak zorundalartam olarakKırmak için 1.0.
İlk örnek, ikili kayan nokta tam olarak gösterilebilir olan 0.25, bir adım kullandığı talihsiz - akıllı hem örnek adım boyutu 0.2 kullanmak olurdu. (0.2 tam olarak ikili kayan nokta olarak temsil edilebilir değil.)
Önde gelen çift eğik çizgi üzere bir U...
Neden't değişkenleri " olarak ila...
Kullanarak "gibi" hazır deyi...
Neden bu kod rastgele dizeleri yazdırm...
Neden &; ad std quot;" kötü olara...