是否有可能在纯 C 中创建一个接受双精度并将其提升到另一个双精度的函数?如 (3.5 2.7 )。有人告诉我这只有在使用汇编来编写函数时才有可能。
3 回答
pow()
谁告诉你只有使用汇编才能实现该功能的人是错误的。这显然是错误的,因为求幂的数学概念比计算机早了 2000 多年。1对数是在大约 400 年前发明的(作为一种简化涉及取幂的计算的方法),计算尺紧随其后。2在数字计算器发明之前,计算尺是计算算术表达式的主要工具。
您可能上过一堂数学课,其中涉及使用对数和幂表条目的插值来执行计算。3 如果你记得这样的一课,这就暗示可以使用常规数学来执行这些计算。无论如何,这也是教导对数和指数性质的地方。
在微积分中,有一堂关于泰勒级数的课,以及如何使用泰勒多项式来逼近一个函数。4由于对数的麦克劳林级数(以 0 为中心的泰勒级数)仅在参数位于区间 (-1, 1) 内时才会收敛,因此您可以使用常规数学来缩小参数,并使用数学来调整计算的答案得到想要的答案。例如,要计算ln
(2.7),您可以计算ln
(2.7) - ln
(2 2 ) + ln
(2 2 ) = ln
(2.7/2 2 ) + ln
(2 2 ) = ln
(0.675) + 2× ln
(2)。使用第一学期的麦克劳林级数,并查表ln
(2),你就能得到答案。
无论该pow()
功能是否在库中通过汇编实现,它只是计算人类告诉它计算的内容。在硬件中完成的任何魔术都无法在软件或纸上完成。
- 欧几里得和阿基米德都精通指数的概念。
- 约翰纳皮尔在 1614 年发表了他的对数理论。几年后,亨利布里格斯改进了这个概念,他还发表了第一个常用对数表。William Oughtred在 1622 年发明了计算尺。
- 遗憾的是,表格数学可能已从现代课程中删除,因为它无助于提高标准化考试成绩,而且使用计算器要容易得多。
- 早在 300 年前,泰勒级数就产生了几个不同的函数,然后布鲁克·泰勒得出了一种数学方法来创建它们。
有些事情只能在汇编中完成,因为否则无法访问指令。对于普通算法,例如计算,情况并非如此。一个 pow 函数有什么特别之处以至于你不能用 C 语言编写它?如果您在汇编中编写它可能会更快,但这并不是实现它的障碍。
您可以在不组装的情况下计算任何东西(就像手动计算一样),但速度会慢得多;这就是为什么没有人在不使用特殊硬件支持的情况下做这些事情的原因。