将float转换为double并返回float会在C++中给出相同的值

Tob*_*ull 7 c++ floating-point

假设在以下代码中

float f1 = ...;
double d1 = static_cast<double>(f1);
float f2 = static_cast<float>(d1);

ASSERT( f1 == f2 );
Run Code Online (Sandbox Code Playgroud)

变量f1初始化为不是NaN的东西.那么断言是否保证符合C++标准?

fuk*_*hik 5

以下是一些线索,但不是答案:

4.6 float类型的prvalue可以转换为double类型的prvalue。该值不变。这种转换称为浮点升级。...

4.8浮点类型的prvalue可以转换为另一种浮点类型的prvalue。如果可以在目标类型中精确表示源值,那么转换的结果就是该精确表示。如果源值在两个相邻的目标值之间,则转换的结果是这些值之一的实现定义选择。

  • 为了完整起见,请参见3.9.1 / 8:“ float类型的值集是double类型的值集的子集”。因此,除了合规的实现之外,无需假设其他任何内容。 (6认同)