strtod和下溢

Ste*_*ves 1 c c++ type-conversion visual-c++

我想在使用strtod函数在C++(Visual C++ 2010)中将字符串转换为double时检测下溢.下面的代码不能像我期望的那样工作,尽管我是根据strtod文档做的:

 char numStr[] = "123456.122111111123123123123132123123123123123124434345345";
 char* pEnd;
 double d = strtod(numStr, &pEnd);
 int errorNum = errno;
 if (errorNum == ERANGE) // this should be true
 {
  // underflow occurred
 }
Run Code Online (Sandbox Code Playgroud)

使用调试器,我发现errorNum总是被设置为0ERANGE34.

我错过了什么?

Mat*_*hen 5

该值不会下溢.它(大)比最小的正常正双倍大.即使是最后一个地方(5*10 ^ -51)也是.最小的普通64位IEEE双精度是2 ^?1022.