CPU "cast" 浮点 x87(我认为)值如何?

How does the CPU "cast" a floating point x87 (i think) value?

我只是想知道 CPU "Cast" 是如何得到浮点数的。 我的意思是,我认为当我们在 C/C++ 中使用 "float" 或 "double" 时,编译器正在使用 x87 单元,或者我错了吗? (我找不到答案)那么,如果是这种情况并且没有模拟浮点数,编译器如何转换它?

不清楚

是什么意思

"Cast" a floating point number. ?

如果目标体系结构有 FPU,那么编译器将发出 FPU 指令来操作浮点变量,没有什么神秘的…… 为了将 float 变量分配给 int 变量,float 必须被截断或四舍五入(向上或向下)。通常存在用于此目的的特殊说明。

如果目标体系结构是 "FPU-less",则编译器(工具链)可能会使用可用的 CPU 指令提供浮点运算的软件实现。例如,表达式 a = x * y;将等同于 a = fmul(x, y);其中 fmul() 是编译器提供的特殊函数(内部函数),用于在没有 FPU 的情况下进行浮点运算。当然,这通常比使用硬件 FPU 慢得多。如果性能很重要,则此类平台不使用浮点运算,可以使用定点运算 https://en.wikipedia.org/wiki/Fixed-point_arithmetic

I mean, i suppouse that when when we use a "float" or "double" in C/C++ the compiler is using the x87 unit, or am i wrong?

在现代 Intel 处理器上,编译器可能会使用 SSE/AVX 寄存器。 FPU 通常不经常使用。

I just wanted to know how the CPU "Cast" a floating point number.

将整数转换为浮点数的计算基本上是(掩盖了一些细节):

  • 从整数的二进制(对于无符号类型)或二进制补码(对于有符号类型)表示开始。
  • 如果数字为零,return 所有位都为零。
  • 如果是负数,记住这一点并取负数使它成为正数。
  • 找到整数中设置的最高位。
  • 找到适合目标格式有效数字的最低位。 (例如对于float常用的IEEE-754 binary32格式,24位适合尾数,所以最高位设置后的第25th位不适合.)
  • 在尾数结束的位置舍入数字。
  • 计算指数,它是最高位集位置的函数。添加用于对指数进行编码的“偏差”(二进制 32 为 127,二进制 64 为 1023)。
  • Assemble 一个符号位,指数位,尾数位(省略高位,因为它总是一个)。 Return 那些位。

该计算准备表示浮点数的位。 (它省略了涉及 NaN、无穷大和次正规数等特殊情况的详细信息,因为在将典型整数格式转换为典型浮点格式时不会发生这些情况。)

该计算可以“在软件中”(即使用移位位、测试值等的通用指令)或“在硬件中”(即使用进行转换的特殊指令)执行。所有台式电脑都有这方面的说明。用于特殊用途嵌入式用途的小型处理器可能没有此类指令。