Project1

标题: 三角函数计算功能问题 [打印本页]

作者: chd114    时间: 2013-12-10 15:14
标题: 三角函数计算功能问题

  1.   def sin # 正弦函数
  2.     s=0.000290888#sin1'
  3.     c=0.999854545#cos1'
  4.     s1=0.000290888#sin1'
  5.     c1=0.999854545#cos1'
  6.     for i in 2..self
  7.       s*=c1
  8.       s+=c*s1
  9.       c=(1-s**2)**0.5
  10.     end
  11.     num=s
  12.   end
  13.   def cos # 余弦函数
  14.     s=0.000290888#sin1'
  15.     c=0.999854545#cos1'
  16.     s1=0.000290888#sin1'
  17.     c1=0.999854545#cos1'
  18.     for i in 2..self+1
  19.       s*=c1
  20.       s+=c*s1
  21.       c=(1-s**2)**0.5
  22.     end
  23.     num=c
  24.   end
  25.   def tan # 正切函数
  26.     s=0.000290888#sin1'
  27.     c=0.999854545#cos1'
  28.     s1=0.000290888#sin1'
  29.     c1=0.999854545#cos1'
  30.     for i in 2..self
  31.       s*=c1
  32.       s+=c*s1
  33.       c=(1-s**2)**0.5
  34.     end
  35.     c=(1-(s*c1+c*s1)**2)**0.5
  36.     t=s/c
  37.     num=t
  38.   end
复制代码
算sin30度、cos60度算出来的不是0.5···而且算不出1,算出负数就崩溃···求解原因···
作者: 你欠抽吧    时间: 2013-12-10 15:50
直接用Math模块不行
作者: RyanBern    时间: 2013-12-10 16:53
你这都是近似值啊,当然算不出1,因此sin30°不是0.5,而且也有可能根号下面是负数导致崩溃。
还有个很严重的问题,就是你只能算0到90度的值。超过90度就错了。
话说很少用和角公式算三角函数的。为啥不用泰勒公式?收敛速度快而且不容易出错。
作者: 无脑之人    时间: 2013-12-10 21:52
1.好奇葩的方法,调用self是想收个nil么
2.Math的三角函数必须用弧度制,函数定义域有的是有限制的
3.我好像看到了和角公式?看起来好流弊的样子,求解这种方法比Math默认的慢多少倍2333
作者: 晴兰    时间: 2013-12-11 14:12
提示: 作者被禁止或删除 内容自动屏蔽
作者: chd114    时间: 2013-12-14 18:20
晴兰 发表于 2013-12-11 14:12
算不准的原因是。。你的cos1分的值写错了。。。(是不是忘记开根号了)

另外给一个实现:

我是按照数学书上的那个程序设计思路弄得```应该没错吧```开根号不就等于**0.5吗```
作者: 晴兰    时间: 2013-12-14 19:44
提示: 作者被禁止或删除 内容自动屏蔽
作者: chd114    时间: 2013-12-14 20:00
晴兰 发表于 2013-12-14 19:44
不管你是抄错还是写错还是上传错还是记错。
你的初值s*s + c*c 就不等于1。而且偏差不小。这是你30度得不到 ...
  1. irb(main):108:0> (0..1000).map{|x|
复制代码
这行也出错是什么情况```
作者: chd114    时间: 2013-12-28 20:01
晴兰 发表于 2013-12-11 14:12
算不准的原因是。。你的cos1分的值写错了。。。(是不是忘记开根号了)

另外给一个实现:

闹心的事情又来了的说···
  1. p 30.cos→0.154251449887585
  2. p 60.cos→-0.952142980415156
  3. p 3600.cos→0.965045075851604
复制代码
就是这样···用了你的脚本去掉原来的脚本后的情况···
作者: chd114    时间: 2013-12-29 00:33
晴兰 发表于 2013-12-14 19:44
不管你是抄错还是写错还是上传错还是记错。
你的初值s*s + c*c 就不等于1。而且偏差不小。这是你30度得不到 ...

那就要用的脚本是
  1. p 1/2.cos
复制代码
才是90度?
作者: fux2    时间: 2013-12-29 08:40
没记错的话ruby里的Math都是算弧度的,你想算Cos60大概只能用
  1. p Math.cos(Math::PI/3)
复制代码

作者: chd114    时间: 2013-12-29 08:50
fux2 发表于 2013-12-29 08:40
没记错的话ruby里的Math都是算弧度的,你想算Cos60大概只能用

是只能算弧度?那38.5之类的角度怎么办···
作者: fux2    时间: 2013-12-29 09:24
chd114 发表于 2013-12-29 08:50
是只能算弧度?那38.5之类的角度怎么办···

chd巨巨你数学咋学的……弧度角度互相转啊。
但不建议用Math库的常量PI,吉拔疼,网上找一个吧。
作者: chd114    时间: 2013-12-29 13:08
fux2 发表于 2013-12-29 09:24
chd巨巨你数学咋学的……弧度角度互相转啊。
但不建议用Math库的常量PI,吉拔疼,网上找一个吧。 ...

其实我的意思是···难道只能用弧度算吗···我再加个插件把角度换算成弧度的话还算得走吗···比如38.3333333333°之类的···




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1