【问题标题】:Does float type coercion always yield the same result as static_cast? [duplicate]浮点类型强制是否总是产生与 static_cast 相同的结果? [复制]
【发布时间】:2019-09-12 14:43:47
【问题描述】:

亲爱的花友们,

是否有某种保证将浮点类型强制转换为“更宽”的类型,总是产生与执行相应的 static_cast 相同的结果?

这里是一个例子:

float f = <any float>;
double a = f;
double b = static_cast<double>(f);

// does this always hold?
EXPECT_TRUE(a==b);

感谢您提供的信息。

【问题讨论】:

  • 这显然不适用于 NaN。因为 NaN 被定义为不等于任何包括它们自己。但这并不是您真正要问的问题,所以只需添加评论即可。
  • 我很好奇是什么让你认为它可能会有所不同?
  • gcc 将创建相同的汇编指令:godbolt.org/z/i7K_vw
  • 请注意,如果根据 IEEE 754 表示,double 可以保存 float 的任何值。因此不会损失精度(无舍入等)。
  • @user1810087 什么都没有?真的吗?

标签: c++


【解决方案1】:

float 类型强制转换是否总是产生与 static_cast 相同的结果?

似乎通过类型强制,您指的是隐式转换。答案是肯定的:如果存在从一种类型到另一种类型的隐式转换,则静态转换会执行相同的转换。

【讨论】:

    猜你喜欢
    • 2013-06-06
    • 1970-01-01
    • 2016-07-10
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多