3
考慮兩個以下的代碼段 - 在它們之間的唯一區別是一個單一的COUT打印出值EPS:
http://ideone.com/0bEeHz - 這裏的程序進入和無限循環由於COUT每股收益的變化值設爲0最低雙重正值 - 可以改變其價值?
#include <iostream>
int main()
{
double tmp = 1.;
double eps;
while(tmp != 0) {
eps = tmp;
tmp /= 2.;
}
if(eps == 0) {
std::cout << "(1)eps is zero!\n";
}
std::cout << "eps before: " << eps;
if(eps == 0) {
std::cout << "(2)eps is zero!\n";
}
while(eps < 1.) {
tmp = eps;
eps *= 2.;
if(tmp == eps) {
printf("wtf?\n");
}
}
std::cout << "eps after: " << eps;
}
後
http://ideone.com/pI4d30 - 這裏我已經評論了cout。
#include <iostream>
int main()
{
double tmp = 1.;
double eps;
while(tmp != 0) {
eps = tmp;
tmp /= 2.;
}
if(eps == 0) {
std::cout << "(1)eps is zero!\n";
}
//std::cout << "eps before: " << eps;
if(eps == 0) {
std::cout << "(2)eps is zero!\n";
}
while(eps < 1.) {
tmp = eps;
eps *= 2.;
if(tmp == eps) {
printf("wtf?\n");
}
}
std::cout << "eps after: " << eps;
}
因此,一個單一的cout顯着和令人驚訝的非常改變程序邏輯。這是爲什麼?
我無法在G ++ 4.7上重現這一點 – Pubby