何时需要警告隐式浮点提升?

问题描述 投票:0回答:1

我的 C++ 编译器(带有

-Wdouble-promotion
的 Clang)会警告隐式浮点转换,如

some_long_double_value() > 1.0

虽然我理解双常量

1.0
为了比较而隐式转换为
long double
值,但我不明白为什么这是值得警告的。

我知道隐式浮点转换在某些情况下可能是不可取的,例如重载解析。但我认为为了比较,这是完全无害的。或者我在这里遗漏了一些东西,例如边框或特殊的硬件情况?

c++ floating-point
1个回答
0
投票

何时需要警告隐式浮点提升?

当代码的文字具有不同的值(如

double
long double
)时,代码将具有不同的功能。通过在比较中使用匹配类型,它更有可能是预期的代码并注意因果错误。

考虑与 1.0 不同的值。

some_long_double_value() > 0.1 
// versus
some_long_double_value() > 0.1L

十进制文本中的文字可能具有不同的值,因为

(long double) 0.1
不一定与
0.1L
相同。

样品:

0.1  --> 0x1.999999999999ap-4
0.1L --> 0x1.999999999999999ap-4

如果代码确实需要将

long double
double
进行比较,请明确说明。使用强制转换,或者更类似于 C++ 的东西。考虑评论这样的代码,即使有强制转换,它看起来也不对劲。

some_long_double_value() > (long double) 0.1  /* Cast used intentionally */
© www.soinside.com 2019 - 2024. All rights reserved.