>>112
確認してみたけどやっぱり厳密に 0 になるときだけだったよ。
だからそのコードは問題ないんじゃない?
確認方法は、下記のとおり。

double a = 1;

while( a!=0 )
{
a /= 2;
std::cout << a << "!=0 == " << (a!=0) << std::endl;
std::cout << a << "*2 == " << (a*2 ) << std::endl;
}