1

我有一个项目,我们正试图降低代码空间。我们在一个文件中有一个位置调用数学库中的 pow() 函数,该函数为这一行代码的最终十六进制添加了额外的 +12k 代码。我已经进行了一些搜索,但似乎找不到在数学库之外执行 pow 函数的好方法。我发现的每个示例都在使用数学库。最糟糕的是我需要浮点,因为我需要提出一些不断变化到 1.4 的幂的未知变量,而我被告知的控制器实际上并没有浮点。有人告诉我一些没有浮点的 72Mhz 32 位 ARM 设备,因此一个库函数的空间很大。有没有其他人尝试过这样做并赢得了这场战斗?

4

3 回答 3

1

您的问题比编写通用 pow() 函数要简单一些,因为指数是固定的。您还可以从功能齐全的 pow() 中稍微放宽精度要求。

选项 1:为 f(x) = x^1.4实施泰勒级数展开。您将需要选择一些 x 的值来扩展泰勒级数,并且随着 x 远离该值,您将失去精度。

选项 2:通过将 x^1.4 在某些点的值制成表格来构造一个插值表,然后使用线性(或更高阶多项式)插值来计算中间点的值。

于 2012-03-21T00:23:36.263 回答
1

您可以在小数指数上使用此规则,将其分解为整数根和整数幂函数,一个接一个地应用。

由于指数是固定的,这可以使您的代码更简单,因为1.4 = 7/5. 现在您只需要编写一个函数,在整数输入上同时执行这两个步骤,就可以避免浮点计算的损失。

于 2012-03-21T00:26:07.243 回答
0

你可能会用更少的代码来float代替doubleand powf()

float var=0.12345f;
var=powf(var,1.4f);

自然,结果会不太精确。

于 2012-03-21T00:16:05.470 回答