C如何将两个浮点数相乘?
How does C multiply two float numbers?
如果我们有两个整数,例如 5 和 6,我们可以这样做
for(int i = 0; i < 5; i++)
number += 6;
这和
是一样的
number = 5*6;
但是,它如何用于浮点数?我在很多论坛上搜索,都找不到答案。有人知道 C 如何使两个浮点数相乘吗?
现在,浮点运算在 ALU 的全部指令中作为单个指令执行,不需要软件实现。
无论如何,你可以很容易地想象一个浮点乘法是由
执行的
将尾数相乘,将其视为具有适当缩放比例的整数;
加上指数;
组合符号。
需要对零等特殊数字进行额外处理。
how does C multiplies two numbers?
首先,编译器会判断是否涉及常量,所以可能会进行移位或移位加加。
如果没有常量或常量太大,并且处理器没有乘法指令且没有乘法硬件,则 C 编译器将使用库例程来完成这项工作。有时,这些库例程称为内部函数或助手。这些是为了性能用汇编手写的,编译器会知道是否使用了非标准调用约定。在这种情况下,非标准约定可以提高效率,例如,知道某些临时寄存器将被保留。
如果没有浮点指令也没有浮点硬件,浮点的工作原理是一样的:为提高性能而在汇编中手写的特殊库例程,可能使用非标准调用约定。
当指令集中有指令,但没有针对它们的硬件实现时(当处理器的高端兄弟确实有硬件时,这种情况发生在处理器的低端),那么这些指令将产生硬件异常,这将允许软件根据需要模拟指令和寄存器。通常,这比预先知道硬件没有这些操作更有效——最好调用库函数,但这种异常仿真方法允许执行需要指令的“正常”代码& 注册。
如果我们有两个整数,例如 5 和 6,我们可以这样做
for(int i = 0; i < 5; i++)
number += 6;
这和
是一样的number = 5*6;
但是,它如何用于浮点数?我在很多论坛上搜索,都找不到答案。有人知道 C 如何使两个浮点数相乘吗?
现在,浮点运算在 ALU 的全部指令中作为单个指令执行,不需要软件实现。
无论如何,你可以很容易地想象一个浮点乘法是由
执行的将尾数相乘,将其视为具有适当缩放比例的整数;
加上指数;
组合符号。
需要对零等特殊数字进行额外处理。
how does C multiplies two numbers?
首先,编译器会判断是否涉及常量,所以可能会进行移位或移位加加。
如果没有常量或常量太大,并且处理器没有乘法指令且没有乘法硬件,则 C 编译器将使用库例程来完成这项工作。有时,这些库例程称为内部函数或助手。这些是为了性能用汇编手写的,编译器会知道是否使用了非标准调用约定。在这种情况下,非标准约定可以提高效率,例如,知道某些临时寄存器将被保留。
如果没有浮点指令也没有浮点硬件,浮点的工作原理是一样的:为提高性能而在汇编中手写的特殊库例程,可能使用非标准调用约定。
当指令集中有指令,但没有针对它们的硬件实现时(当处理器的高端兄弟确实有硬件时,这种情况发生在处理器的低端),那么这些指令将产生硬件异常,这将允许软件根据需要模拟指令和寄存器。通常,这比预先知道硬件没有这些操作更有效——最好调用库函数,但这种异常仿真方法允许执行需要指令的“正常”代码& 注册。