gpt4 book ai didi

c - 如何在没有 math.h 的情况下编写一个简单的对数函数?

转载 作者:行者123 更新时间:2023-12-03 08:31:37 26 4
gpt4 key购买 nike

This question虽然它给了我一些细节,但我并没有完全帮助我。

我当前的基础代码:

#define e 2.7182818284590452353602874713527

double logarithm(long double dec) {
// return log10f(dec);
return result;
}

我从链接的问题中学到了什么:

  1. 对数函数使用 e作为基础。 Stated by the accepted answer .
  2. 同样根据已接受的答案,^不适用于指数(我计划将此语法设为指数形式,这可能意味着放弃 power() 函数),而是一个 XOR 运算符。
  3. 有人回答了我的问题,但被删除了。这是关于log10f源代码,但有点令人困惑,所以对我来说不值得。

现在我对这个函数的标准是它是从头开始制作的,没有多个函数,并使其进行简单排序(尽管我怀疑对数并不简单)。

答案的代码:

#include <math.h>

float log_num(int num) {
return log10f(num);
}

是的,相当简单,但作为一个挑战,我不想使用 log()尽管我仍然依赖 <math.h> 本身功能的功能。

问题:在没有内置对数函数的情况下从头开始创建对数函数的简单形式是什么? 如果不使用 <math.h> ,那怎么样?

最佳答案

如果您需要相当准确的东西,您可以使用 Taylor series公式。如果需要更高的精度,请增加迭代次数。

#define EULER_CONST 2.718281828459045235
#define TAYLOR_ITERATIONS 20

double nat_log(double x) {
// Trap illegal values
if (x <= 0) {
return 0.0/0.0; // NaN
}

// Confine x to a sensible range
int power_adjust = 0;
while (x > 1.0) {
x /= EULER_CONST;
power_adjust++;
}
while (x < .25) {
x *= EULER_CONST;
power_adjust--;
}

// Now use the Taylor series to calculate the logarithm
x -= 1.0;
double t = 0.0, s = 1.0, z = x;
for (int k=1; k<=TAYLOR_ITERATIONS; k++) {
t += z * s / k;
z *= x;
s = -s;
}

// Combine the result with the power_adjust value and return
return t + power_adjust;
}

关于c - 如何在没有 math.h 的情况下编写一个简单的对数函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64894566/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com