SORU
30 HAZİRAN 2011, PERŞEMBE


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ım 2.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ğeri 1.0;, 13 **ancak 0.0 bir olarak kesin bir gösterimi var ikili kayan nokta değeri, x değeri asla tam olarak 1. 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
30 HAZİRAN 2011, PERŞEMBE


İ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.)

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Hollyscoop

    Hollyscoop

    30 Ocak 2007
  • Jeb Corliss

    Jeb Corliss

    17 Kasım 2006
  • Migs351

    Migs351

    3 HAZİRAN 2007