gpt4 book ai didi

c - float 变量如何自动提升为 double 类型?

转载 作者:行者123 更新时间:2023-12-01 12:51:35 25 4
gpt4 key购买 nike

我知道在 C 和 Java 中,float 的底层表示是 IEEE754-32,double 是 IEEE754-64。

在表达式中,float将自动升级为 double .又怎样?
以 3.7f 为例。过程是这样的吗?

  1. 3.7f will be represented in memory using IEEE754. It fits in 4 bytes.
  2. During calculation, it may be loaded into a 64-bit register (or whatever 64-bit place), turning the 3.7f into IEEE754-64 represent.

最佳答案

它非常依赖于实现。

例如,在 x86 平台上,FPU 命令集包括用于在 IEEE754 float 中加载/存储数据的命令。和 double格式(以及许多其他格式)。数据加载到具有 80 位宽度的内部 FPU 寄存器中。所以实际上在 x86 上所有浮点计算都是以 80 位浮点精度执行的。即所有浮点数据实际上都提升到 80 位精度。这些寄存器中的数据如何表示完全无关紧要,因为无论如何您都无法直接观察它们。

这意味着在 x86 平台上没有单步浮点到 double 转换这样的东西。每当需要进行这种转换时,它实际上是通过两步转换来实现的:float-to-internal-fpu 和 internal-fpu-to-double。

这个 BTW 在 x86 FPU 计算模型和 C/C++ 计算模型之间创建了显着的语义差异。为了完全匹配语言模型,处理器必须强制降低中间浮点结果的精度,从而对性能产生负面影响。许多编译器为用户提供控制 FPU 计算模型的选项,允许用户选择严格的 C/C++ 一致性、更好的性能或介于两者之间的选项。

几年前,FPU 单元还是 x86 平台的可选组件。在无 FPU 平台上的浮点计算是在软件中执行的,要么通过模拟 FPU,要么通过生成根本没有任何 FPU 指令的代码。在这样的实现中,事情可能会以不同的方式工作,例如,执行来自 IEEE754 float 的软件转换。到 IEEE754 double直接地。

关于c - float 变量如何自动提升为 double 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12118738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com