なのでRubyのメソッドは知っているのですMath.sqrt(number)
が、言語学習の一環として簡単な関数を作ってみようかなと思いました。基本的なレベルから平方根が間違っていることを見つけようとしている可能性がありますが、これが私がやったことです:
def negative?(number)
number < 0
end
@start = 2
def sqrt(number)
if negative? number
puts "Can't do negative"
else
if @start**2 < number
@start += 0.01
sqrt(number)
else
puts "Square root of #{number} is #{@start}!"
end
end
end
def start_sqrt
print "Input text: "
number = Integer(gets.strip)
sqrt(number)
end
begin
start_sqrt
rescue ArgumentError
puts "Need a positive number!"
end
これは小さい数値では問題なく機能しますが、大きい数値を入力する場合は、答えを取得したい場合は @start の値を変更する必要があります。そうしないと、「スタックが深すぎます」と表示されます。コードで何か間違ったことをしているのですか、それとも Ruby がすべて正常に動作していて、リソースを大量に消費する方法で数値の平方根を見つけるように求めているだけですか? これはおそらくプログラミングの質問ではなく、数学の質問のほうが多いと思います。
def sqrt(number)
if negative? number
puts "Can't do negative"
else
root = number**0.5
puts "Square root of #{number} is #{root}!"
end
end