gpt4 book ai didi

ruby - 如何在不使用乘法的情况下对数字进行平方?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:10:29 24 4
gpt4 key购买 nike

想知道是否有一种方法可以在不使用操作符号 (*) 的情况下编写一个对数字(整数或小数/ float )进行平方的方法。例如:2的平方为42.5的平方为6.253.5 将是 12.25

这是我的方法:

def square(num)
number = num
number2 = number
(1...(number2.floor)).each{ num += number }
num
end

puts square(2) #=> 4 [Correct]
puts square(16) #=> 256 [Correct]
puts square(2.5) #=> 5.0 [Wrong]
puts square(3.5) #=> 10.5 [Wrong]

该代码适用于整数,但不适用于 float /小数。我在这里做错了什么?另外,如果有人对这个问题有新的方法,请分享。也欢迎算法。此外,考虑到该方法的性能将是一个优势。

最佳答案

您可以使用一些技巧,此处按照技巧的递增顺序排列。

对数

观察 k * k = e^log(k*k) = e^(log(k) + log(k)),并使用该规则:

Math.exp(Math.log(5.2) + Math.log(5.2))
# => 27.04

这里没有乘法!

部门

正如另一位评论者所建议的,您可以进行倒数运算,除法:k/(1.0/k) == k^2。但是,这会引入额外的浮点错误,因为 k/(1.0/k) 是两个浮点运算,而 k * k 只是一个。

求幂

或者,由于这是 Ruby,如果您想要与浮点运算完全相同的值并且不想使用乘法运算符,则可以使用求幂运算符:k**2 = = k * k

调用网络服务

不自己做就不算乘法!

require 'wolfram'       # https://github.com/cldwalker/wolfram
query = 'Square[5.2]'
result = Wolfram.fetch(query)

公然作弊

最后,如果你真的觉得便宜,你可以避免实际使用文字“*”操作,并使用等效的东西:

n = ...
require 'base64'
n.send (Base64.decode64 'Kg==').to_sym, n # => n * n

关于ruby - 如何在不使用乘法的情况下对数字进行平方?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20943460/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com