没有math.h的双重幂函数

时间:2017-11-11 16:58:59

标签: c double pow

我想知道如何在没有math.h的情况下使用双倍功能来创建一个函数

例如,如果我想要

4.3^2.5

1 个答案:

答案 0 :(得分:1)

这是一个粗略的轮廓。

除了域和特殊情况的问题之外,

pow(x, y)在数学上等同于exp(log(x)*y)log(x)exp(x)可以用系列近似。

泰勒系列可以从头开始计算。高级实现使用预先针对特定情况设计的minimax多项式变体。

通常,在计算log时,我们将参数的指数部分与小数部分分开,然后使用多项式来近似对数,然后为指数部分添加对数。

在计算exp时,我们将整数和小数部分分开并乘以每个部分的exp

使用基数为2的浮点数,通常使用基数为2的对数和取幂。那么指数 e 的对数(代表2 e )只是 e

因为在执行此操作时,您希望操作浮点值的指数和有效位,您必须访问它们的编码。 math.h为此提供了frexpldexp等惯例。要在没有math.h的情况下执行此操作,您需要访问对象的字节,这是另一个Stack Overflow问题的主题。

创建大致正确的pow版本并不难。计算误差并证明它们的界限需要花费大量的工作,并且通常难以设计多项式和其他计算来减少误差。