我为指数编写的这个基本程序只适用于整数——我做错了啥?
Posted
技术标签:
【中文标题】我为指数编写的这个基本程序只适用于整数——我做错了啥?【英文标题】:This basic programme I wrote for exponents only works with integers - what did I do wrong?我为指数编写的这个基本程序只适用于整数——我做错了什么? 【发布时间】:2019-02-23 11:28:32 【问题描述】:我正在构建一些基本程序,作为练习不同编程技术的一种方式。我以为我写了一个程序来计算指数,但它不能正常工作。
如果我输入整数,它就可以正常工作,即。平方 (2,5) 但 (2,4.5) 不起作用。
public static double squared(double a, double b)
double a1 = a;
double sq = 0;
while (b > 1)
sq = a*a1;
a =sq;
b--;
return sq;
public static void main(String[] args)
System.out.println(squared(2,2));
【问题讨论】:
我看到你在使用while循环,如果b
的输入是4.5
,这个循环会“循环”多少次?
谢谢您,先生。很明显,我:squared(facepalm, 10);
因为我看不出有什么问题,所以我复制它并尝试了它:完全没有问题。 squared(2,4,5) 给出应有的 32.0。你没想到它会做一个乘法,只执行到一半,然后突然停在中间什么的,是吗?
【参考方案1】:
如果b
是整数,您的程序将按预期运行,因为您的代码假定b
是整数。
无论b
是 4 还是 4.5,都会计算出相同的结果,因为 0 和 0.5 都小于 1(从而结束循环)。
【讨论】:
【参考方案2】:您的算法适用于整数,但为了使用浮点指数计算幂,您的方法不起作用。
首先,让我们以pow(2, 4.5)
为例,明确浮点指数的含义:
所以为了计算这个,首先我们必须将浮点数转换为分数,然后计算幂和平方根。这是可行的,但它非常乏味,而且它们是更好的解决方案。
如果我们有,其中b
可以是浮点数,A
是结果,我们可以取两边的对数:
相当于:
简化为:
现在这可以很容易地在 Java 中完成:
public static void main(String args[])
double a = 2;
double b = 4.5;
double A = Math.exp(b * Math.log(a));
System.out.println(A);
如果你不想使用内置的exp
函数,我们可以使用Newton-Raphson公式来计算:
其中:!
表示数字的阶乘。
您的初始算法可用于计算具有整数指数的x
的pow
。
【讨论】:
以上是关于我为指数编写的这个基本程序只适用于整数——我做错了啥?的主要内容,如果未能解决你的问题,请参考以下文章