Math 不支持浮点运算的处理器上的浮点运算?

Math 不支持浮点运算的处理器上的浮点运算?,math,floating-point,processor,Math,Floating Point,Processor,在没有浮点单元的处理器上,浮点数学是如何执行的?e、 g低端8位微控制器 在没有任何浮点硬件的系统中,CPU使用在整数算术逻辑单元上运行的一系列更简单的定点算术运算来模拟它 看看维基百科页面:你可能会找到更多信息 实际上,模拟指令的不是cpu。低端cpu的浮点运算由整数算术指令构成,编译器是生成这些指令的编译器。基本上,编译器(工具链)附带了一个包含浮点函数的浮点库。看看这篇文章: (摘自本文) 首先,您必须考虑如何在内存中表示浮点数: struct this_is_a_floating_poi

在没有浮点单元的处理器上,浮点数学是如何执行的?e、 g低端8位微控制器

在没有任何浮点硬件的系统中,CPU使用在整数算术逻辑单元上运行的一系列更简单的定点算术运算来模拟它

看看维基百科页面:你可能会找到更多信息


实际上,模拟指令的不是cpu。低端cpu的浮点运算由整数算术指令构成,编译器是生成这些指令的编译器。基本上,编译器(工具链)附带了一个包含浮点函数的浮点库。

看看这篇文章:

(摘自本文)

首先,您必须考虑如何在内存中表示浮点数:

struct this_is_a_floating_point_number
{
    static const unsigned int mant = ???;
    static const int          expo = ???;
    static const bool         posi = ???;
};
<>你必须考虑如何用这个表示做基本的计算。有些可能很容易实现,并且在运行时相当快(我想到的是乘或除2)

除法可能更难,例如,牛顿算法可以用来计算答案

最后,智能近似和表中生成的值可能会在运行时加快计算速度

多年前C++模板帮助我在英特尔386 SX/P>上获得浮点计算 最后,我学到了很多数学和C++,但同时决定买一个协处理器。 特别是多项式算法和智能查找表;当你有正弦函数时,谁需要余弦函数或tan函数,帮助你思考如何在浮点运算中使用整数。这也是一个启示。

阅读“完整频谱ROM反汇编”,了解8位Z80处理器上浮点计算的示例


对于正弦函数之类的函数,您可以预先计算一些值,然后使用插值。

简短的答案是“缓慢”。专用硬件可以完成诸如提取不一定是字节对齐的位组之类的任务。软件可以完成专业硬件所能完成的一切,但往往需要更长的时间才能完成。

泰勒级数近似于某一点附近的函数。人们通常希望在区间上得到一致精确的近似值,这使得泰勒级数成为错误的工具@PascalCuoq-不错的加法。我同意这取决于要求是什么。这并不是说我是泰勒级数的粉丝,对我来说,用级数来近似函数是一件令人大开眼界的事。看一看——它使用整数数学来实现数学函数,并且依赖于编译器对浮点值的操作支持。链接数学支持函数可能非常昂贵。相关: