float fv = orginal_value; // original_value may be any float value
...
double dv = (double)fv;
...
fv = (float)dv;
fv是否应该与original_value完全相等?可能会丢失任何精度吗?
float fv = orginal_value; // original_value may be any float value
...
double dv = (double)fv;
...
fv = (float)dv;
fv是否应该与original_value完全相等?可能会丢失任何精度吗?
对于C++,来自第4.6节,也称为conv.fpprom(使用的草案:n337,我相信类似的规定在最终规范中也是可用的)
float类型的prvalue可以转换为double类型的prvalue。值不变。此转换称为浮点数提升。
以及第4.8节,也称为conv.double
浮点类型的prvalue可以转换为另一种浮点类型的prvalue。如果源值可以在目标类型中精确表示,则转换的结果是该精确表示。如果源值介于两个相邻的目标值之间,则转换的结果是这些值中任意一个的实现定义选择。否则,行为未定义。从允许作为浮点提升的转换中排除了浮点转换集合
因此,这些值应该完全相等。
...
行更改了 dv
的值,则可能会导致精度损失甚至 UB。 - Elias Van Ootegem
original_value
的类型是什么? - Caduchon