Ruby中不使用默认运算符的指数公式

Ruby中不使用默认运算符的指数公式,ruby,Ruby,如何在不使用**运算符的情况下使用方法计算指数。假设方法名calculate(a,b),其中a是基,b是指数值 a和b的值可以是正整数或负整数、小数等 谢谢Math.exp(b*Math.log(a))能满足您的需要吗?请注意,虽然这适用于非整数a和b,但它需要a>0。它还受到浮点运算的有限精度限制 在b为整数的限制下,以下递归解有效且为O(logb),即渐近快于重复乘法: def calculate(a, b) return 1.0 / calculate(a, -b) if b <

如何在不使用
**
运算符的情况下使用方法计算指数。假设方法名
calculate(a,b)
,其中
a
是基,
b
是指数值

a
b
的值可以是正整数或负整数、小数等

谢谢

Math.exp(b*Math.log(a))能满足您的需要吗?请注意,虽然这适用于非整数
a
b
,但它需要
a>0
。它还受到浮点运算的有限精度限制


b
为整数的限制下,以下递归解有效且为O(log
b
),即渐近快于重复乘法:

def calculate(a, b)
  return 1.0 / calculate(a, -b) if b < 0
  if b == 0
    1
  elsif b.even?
    calculate(a * a, b / 2)
  else
    a * calculate(a, b - 1)
  end
end
def计算(a、b)
返回1.0/如果b<0,则计算(a,-b)
如果b==0
1.
艾尔希夫b.平吗?
计算(a*a,b/2)
其他的
a*计算(a,b-1)
结束
结束
a
的值可以是整数或小数,也可以是正数或负数。 如果您担心精度问题,您还可以将
return
语句更改为
returnrational(1,calculate(a,-b)),如果b<0

Math.exp(b*Math.log(a))能满足您的需要吗?请注意,虽然这适用于非整数
a
b
,但它需要
a>0
。它还受到浮点运算的有限精度限制


b
为整数的限制下,以下递归解有效且为O(log
b
),即渐近快于重复乘法:

def calculate(a, b)
  return 1.0 / calculate(a, -b) if b < 0
  if b == 0
    1
  elsif b.even?
    calculate(a * a, b / 2)
  else
    a * calculate(a, b - 1)
  end
end
def计算(a、b)
返回1.0/如果b<0,则计算(a,-b)
如果b==0
1.
艾尔希夫b.平吗?
计算(a*a,b/2)
其他的
a*计算(a,b-1)
结束
结束
a
的值可以是整数或小数,也可以是正数或负数。 如果您担心精度问题,您还可以将
return
语句更改为
returnrational(1,calculate(a,-b)),如果b<0

那么:

def calculate(a,b)
  b.times.reduce(1) { |acc, _| acc * a }
end
我认为它很容易阅读,并且可以清楚地显示指数定义。

如何:

def calculate(a,b)
  b.times.reduce(1) { |acc, _| acc * a }
end

我认为它很容易阅读,并且可以清晰地显示指数定义。

与Wand maker建议的解决方案完全相同,创建阵列的语法不同:

Array.new(b, a).reduce(&:*)
另一个使用枚举器的解决方案(应该更快):

b、 times返回一个枚举数,该枚举数产生值0到b-1(结果是b值)


reduce with a block的使用最好从其文档中进行解释:

与Wand maker建议的解决方案完全相同,创建阵列的语法不同:

Array.new(b, a).reduce(&:*)
另一个使用枚举器的解决方案(应该更快):

b、 times返回一个枚举数,该枚举数产生值0到b-1(结果是b值)


reduce与块的用法最好从它的文档中解释:

谢谢!它的工作很好,除了给我81.00000000000003的值时,使用3为基础,4为指数值。谢谢!它的工作很好,除了给我81.00000000000003的值时,使用3为基数和4为指数值。这两个解决方案都非常好!喜欢第一个中创建数组的方式。你能解释一下第二个吗?两个解决方案都很好!喜欢在第一个问题中创建数组的方式。您能解释第二个问题吗?如果对
a
和/或
b
有限制,您的问题中应该包括这些限制@WandMaker在下面的评论中提到,之前有一条评论称
b
是整数,但该评论已被删除。如果
a
和/或
b
有限制,则应将其包括在您的问题中@WandMaker在下面的评论中提到,之前有一条评论称
b
为整数,但该评论已被删除。