我有以下代码
A = 1.0
B = 0.20
N = 8.0
for i in 1..Total
t = Maxt * rand
x = A * Math.cos(t) / (Math.log(B*Math.tan(t/(2*N))))
y = A * Math.sin(t) / (Math.log(B*Math.tan(t/(2*N))))
end
如果我注释掉For循环它会执行正常并产生我想要的1个结果。如果我没有注释掉for循环,它会生成以下内容。我是Ruby的新手,我很好奇为什么它只在for循环出现时才会中断。
rubyfile.rb:22:in `log': Numerical argument out of domain - log (Errno::EDOM)
from rubyfile.rb:22
from rubyfile.rb:20:in `each'
from rubyfile.rb:20
答案 0 :(得分:7)
Math.log
表示对数函数,对于负数未定义。但是,Math.tan
表示切线函数,它可以返回负数。因此,如果Math.tan
出现负数,Math.log
将告诉您其参数是“域外”,这意味着该数字没有对数。
我认为你的输入是随机的这意味着,当你循环时,你比你只运行一次脚本更有可能得到那个错误。如果你是删除循环然后多次运行脚本,我打赌你最终会得到那个错误。
找出为什么你的数学不应该包含负数而且你很高兴:)
答案 1 :(得分:4)
B*Math.tan(t/(2*N)))
将采用负值,并且x < 0
的日志未定义。正如错误所述,您已超出域名。