我对如何在不支持浮点运算的处理器中处理浮点运算感到有些困惑。浮点处理器与定点处理器有何不同?在哪种情况下使用 IEEE 浮点格式?
3 回答
首先,由于各种原因,有许多不同的浮点格式。(一些)DSP 出于性能原因不使用 IEEE,它带有很多额外的包袱(大多数人从不使用)。
从小学开始,我们学会了如何计数,然后我们学会了如何加法,这只是计数的捷径,然后我们学会了乘法,这只是加法的捷径,同样减法和除法是倒数而不是计数的捷径. 我们还学会了一次做一列所有的数学运算,所以如果你有一个处理器可以做至少 1 位数学运算,你可以做加法、减法、乘法和除法的宽度(每个操作数的位数)你希望,这可能需要很多操作,但它是非常可行的,任何通过小学的人都有工具箱/技能集来做这样的事情。
浮点是中学的东西,操纵小数点并使用一些基数的幂 (1.3 * 10^5) + (1.5 * 10*5)。我们知道我们必须让 10 的幂次方相同,然后我们可以在小数点对齐的情况下进行基本的基本加法。乘法甚至更容易,因为您不必排列小数点,您只需对有效数字进行数学运算并简单地添加指数。
当您的处理器具有乘法指令时,它只是您必须进行多次加法的捷径(捷径通常涉及多次加法)。他们所做的取决于他们想要多少时钟周期来降低乘法运算以使用越来越多的芯片空间。同样对于除法,这就是为什么您在许多指令集上看不到除法,而在一些没有除法的指令集上看不到乘法,这是成本权衡,性能与功率和芯片空间,良率等。
那么浮点只是浮点运算核心的扩展,您仍然有定点运算,浮点乘法需要定点乘法和加法以及一些调整。浮点加法需要一些调整,一次加法和更多调整。
现在哪些处理器有 fpus 而哪些没有?哪些带有 fpu 的处理器支持 ieee,哪些不支持?这和上面的信息一样容易找到,但我会让你自己解决这个问题。
例如,如果您能够使用科学记数法(1.345*10^4 + 2.456*10^6,或 2.3*10^6 * 4.5*10^7)进行数学运算,那么您应该能够分解数学步骤参与并编写自己的软浮点例程,未优化,但您可以看到没有 fpu 的 cpu 或不想使用 fpu 的程序员如何进行浮点运算。您必须能够以 2 为底而不是 10 来思考,这使得问题变得更加容易 1.101001*2^4 + 1.010101*2^5,尤其是乘法变得非常容易。
当硬件不支持浮点时,计算由经过高度优化的汇编代码片段完成,通常来自库。
一个谷歌搜索,你就可以找到关于 fixed-point 的内容。我假设您可以自己找到有关 IEEE 浮点的信息 ;-)
祝你好运!
解释和任意定点库可以在这里找到。