[英]Is it possible to create a pow(double a, double b) function in C without assembly?
是否可以创建一个函数,该函数需要一个double并将其提升为纯C语言中另一个double的幂? 如(3.5 2.7 )。 有人告诉我这只有在使用汇编编写函数时才有可能。
谁告诉你pow()
函数只有在使用汇编的情况下才可能实现,是错误的。 这显然是错误的,因为求幂的数学概念比计算机早了2000多年。 1对数是在约400年前发明的(一种简化涉及幂运算的计算方法),并立即遵循了计算规则。 2在数字计算器发明之前,计算尺是用于计算算术表达式的主要工具。
您可能已经上过数学课,其中涉及对数和指数表项使用插值来执行计算。 3如果您还记得这样的课程,则暗示可以使用常规数学执行这些计算。 无论如何,这也是教导对数和指数性质的地方。
在微积分中,有一个关于泰勒级数的课程,以及如何使用泰勒多项式近似函数。 4由于对数的Maclaurin级数(泰勒级数以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)。 在第一学期使用Maclaurin系列,并查找ln
(2)的表,即可得到答案。
不管pow()
函数是通过程序集实现还是不通过程序集实现,它只是在计算一个人告诉它要计算的内容。 没有在硬件上完成的魔术无法在软件或纸上完成。
有些事情只能在组装中完成,因为否则仪器将无法访问。 对于普通算法,例如计算,却并非如此。 pow函数有什么特别之处,使您无法用C编写它? 如果以汇编形式编写它,可能会更快,但这并不是实现它的障碍。
你可以不计算任何装配(你可能会用手工计算它以同样的方式),但它会慢得多 ; 这就是为什么没有人在不使用特殊硬件支持的情况下做这些事情的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.