我對MSVC ldexp行爲感到有點驚訝(它發生在Visual Studio 2013中,但也適用於所有舊版本,至少到2003年)。應該正確回合
例如:
#include <math.h>
#include <stdio.h>
int main()
{
double g=ldexp(2.75,-1074);
double e=ldexp(3.0,-1074);
printf("g=%g e=%g \n",g,e);
return 0;
}
打印
g=9.88131e-324 e=1.4822e-323
第一個G是奇怪的圓...
是2.75 * fmin_denormalized,所以我肯定期待第二個結果e。
如果我評估2.75*ldexp(1.0,-1074)
我正確得到與e相同的值。
我的期望值是否過高,或者Microsoft不符合某些標準?
此行爲與/ fp:strict同樣發生。 __STDC_IEC_559__沒有定義,所以它至少不會做出正確的做法......在C/C++中遵循什麼標準的MSVC 2013是另一個問題...... –