0

我有以下代码

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
4

2 回答 2

7

Math.log表示对数函数,对于负数是未定义的。Math.tan但是,表示正切函数,它可以返回负数。因此,如果Math.tan得出一个负数,Math.log将告诉您它的参数是“域外”,这意味着该数字没有对数。

我敢打赌,您的输入是随机的,这意味着,当您循环时,与仅运行一次脚本相比,您更有可能得到该错误。如果你是删除循环然后多次运行脚本,我敢打赌你最终会得到那个错误。

找出为什么你的数学不应该包含负数,你很高兴:)

于 2011-07-02T18:29:26.653 回答
4

B*Math.tan(t/(2*N)))将采用负值,并且 log 未定义x < 0。如错误所述,您不在域中。

于 2011-07-02T18:29:19.337 回答