回 帖 发 新 帖 刷新版面

主题:[讨论]关于余弦角度不精确的问题

我的程序中得到的角度值很小,d-5/-6,用内部余弦函数求得的结果是1,而不是准确值,该怎样处理能得到最精确的值呢?
我最终的目的是要求一个旋转矩阵r(2,2)
r(1,1)=cos(a);r(1,2)=sin(1,2)
r(2,1)=-r(1,2)r(2,2)=r(1,1)

我的处理办法是r(1,1)=r(1,1)+/-r(1,2),使得r(1,1)**2+r(1,2)**2近似等于1,但是好像循环有累积误差,会发散,不知道该怎样处理能更精确一些。
大虾们有遇到过类似的问题吗?

回复列表 (共9个回复)

沙发


d0达不到你的精度要求么?

板凳

用双精度数。

print *, cos( 1e-5_4 )
print *, cos( 1e-5_8 )
print *, cos( 1e-5_16 )

IVF的计算结果依次是
   1.000000
  0.999999999950000
  0.999999999950000000000416666666665

3 楼


双精度数有的编译器不支持,不知道楼主用的什么编译器。

4 楼

[quote]
双精度数有的编译器不支持,不知道楼主用的什么编译器。[/quote]

双精度肯定支持啊,是fortran标准
real(16)倒是有可能不支持
不过就LZ的问题,根本解决方法还是修改算法

5 楼


我的程序需要循环非常多次,累积下来误差很大,

6 楼


cvf

7 楼


对对,四倍精度有的编译器不支持。

8 楼

原来我的r就是按照理论公式直接写的,但是因为有的r(1,1)**2+r(1,2)**2>1,运行通不过,所以我就自己改了算法,但是这样累计先来误差还是挺大的,不知该如何是好

9 楼

晕啊,cos的参数可是弧度制的啊,这样竟然还需要小数点五位后?那么微小的转动不应该用这样的方式来做了吧,应该对角度做累积然后做一次变换。或是说用全量+增量方式,对于一定的角度内用某个固定值+增量值。

我来回复

您尚未登录,请登录后再回复。点此登录或注册