c - 是否可以在 C 中创建 pow(double a, double b) 函数而无需汇编?

标签 c assembly double

是否可以在纯 C 中创建一个接受 double 并将其计算为另一个 double 次方的函数?如(3.5 2.7)。有人告诉我这只有在使用汇编来编写函数时才有可能。

最佳答案

谁告诉您 pow() 函数只有在使用汇编的情况下才可能实现,这是错误的。这显然是错误的,因为求幂的数学概念比计算机早了 2000 多年。1对数大约在 400 年前发明(作为简化求幂计算的一种方法),而计算尺2计算尺是计算算术表达式的主要工具,直到数字计算器发明为止。

您可能上过一堂数学课,其中涉及对对数和指数表条目使用插值来执行计算。3如果您记得这样的类(class),则提示您可以执行这些计算使用常规数学进行计算。无论如何,这也是教授对数和指数性质的地方。

在微积分中,有一门关于泰勒级数的类(class),以及如何使用泰勒多项式来逼近函数。4由于对数的麦克劳林级数(以 0 为中心的泰勒级数)仅收敛如果参数在区间 (-1, 1) 内,则可以使用常规数学来缩小参数,并使用数学来调整计算的答案以获得所需的答案。例如,要计算 ln(2.7),您可以计算 ln(2.7) - ln(22) + ln(22) = ln(2.7/22) + ln(22 ) = ln(0.675) + 2×ln(2)。使用第一项的麦克劳林级数,并查找 ln(2) 的表格,您就可以得到答案。

无论pow()函数是否在库中通过汇编实现,它都只是计算人类告诉它计算的内容。硬件上没有什么魔法是软件或一张纸上无法完成的。

<小时/>
  1. 两者EuclidArchimedes两人都精通指数的概念。
  2. John Napier 1614 年发表了他的对数理论。几年后,这个概念被 Henry Briggs 改进。 ,他还发表了第一个常用对数表。 William Oughtred被誉为 1622 年发明计算尺的人。
  3. 遗憾的是,表格数学可能已从现代类(class)中删除,因为它无助于提高标准化考试成绩,而且使用计算器要容易得多。
  4. Taylor Series早在 Brook Taylor 之前 300 年前就为几种不同的功能生成了推导了其创作的数学方法。

关于c - 是否可以在 C 中创建 pow(double a, double b) 函数而无需汇编?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18030169/

相关文章:

c++ - 屏蔽对于阻止旁路攻击是否有效?

assembly - NASM float -操作码和操作数的无效组合

c - GDB 调用不在 main 中的函数

assembly - 使用 bsf、blf 查找第一位、最后一位汇编

c++ - 调试汇编程序时返回 0 时在 visual studio 中抛出异常

c++ - 如何使用 libpq 获取 double 值?

java - 在java中显示复数

c# - 不同的类型转换行为

c - 如何在 Linux 中使用 POSIX pthreads 将整数从文件写入缓冲区?

c - 关于用两个七段灯显示0x00到0xFF的问题