为什么Math.Log只在我的for循环中崩溃?

Wul*_*art 0 ruby for-loop logarithm

我有以下代码

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
Run Code Online (Sandbox Code Playgroud)

如果我注释掉For循环它会执行正常并产生我想要的结果之一.如果我没有注释掉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
Run Code Online (Sandbox Code Playgroud)

Mat*_*chu 7

Math.log表示对数函数,对于负数未定义.Math.tan但是,它表示切线函数,它可以返回负数.因此,如果Math.tan出现负数,Math.log则会告诉您其参数是"超出域",这意味着该数字没有对数.

我认为你的输入是随机的这一事实意味着,当你循环时,你比你只运行一次脚本更有可能得到那个错误.如果你是删除循环然后多次运行脚本,我打赌你最终会得到那个错误.

找出为什么你的数学不应该包含负数而且你很好去:)