首页  >  文章  >  后端开发  >  为什么 Printf() 将浮点数提升为双精度?

为什么 Printf() 将浮点数提升为双精度?

DDD
DDD原创
2024-11-17 08:09:03454浏览

Why does Printf() promote floats to doubles?

深入探讨:为什么 Printf() 将浮点数提升为双精度浮点数

Printf() 之所以将 float 参数提升为 double,不仅仅是因为它是一个变参函数。根据 C 标准和 C 标准,所有变参函数的 float 参数都会在传递之前提升为 double。

C99 标准第 6.5.2.2 节明确规定:"[...]浮点类型参数提升为 double。这些被称为默认参数提升。[...]"

C 标准草案第 5.2.2 节也阐明:"[...]浮点类型参数若受浮点提升(4.6)的影响,则在调用之前,参数值会转换为提升后的类型。[...]"

此外,第 4.6 节指出:"float 类型的 pr 值可以转换为 double 类型的 pr 值。值保持不变。"

Cppreference 很好地总结了 C 中变参函数的默认转换:"

  • std::nullptr_t 转换为 void*
  • float 参数转换为 double,与浮点提升一致
  • bool、char、short 和无域枚举转换为 int 或更宽的整型,与整数提升一致

在 C 语言中,这种转换是出于对 K&R C 的兼容性考虑。国际标准(编程语言——C)的说明书中明确指出:"为了与过去的实践兼容,在没有原型声明的情况下,所有参数提升都按 K&R 描述的那样进行,包括 float 到 double 的提升。"

以上是为什么 Printf() 将浮点数提升为双精度?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn