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

时间:2015-03-23 17:55:56

标签: c++ floating-point

在以下代码中假设

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

ASSERT( f1 == f2 );

变量f1被初始化为不是NaN的东西。那么断言是否保证由C ++标准保持?

1 个答案:

答案 0 :(得分:4)

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

  

4.6 float类型的prvalue可以转换为double类型的prvalue。该值保持不变。此转换称为浮点提升。   ...

     

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