主题:如何在fortran中运用角度进行计算?
nosper
[专家分:60] 发布于 2007-04-22 13:57:00
!如何在fortran中运用角度进行计算?
!比如我想表示sin(30度)该怎么解决?
new: 在vc2005+ivf9.1中怎么才能多行注释?
最后更新于:2007-04-23 22:13:00
回复列表 (共17个回复)
沙发
老大徒伤悲 [专家分:29120] 发布于 2007-04-22 14:08:00
很简单啦,换算成弧度就可以了
sin(30*3.14159265/180)
当然你也可以设计一个专门的转换子函数
function Hudu(du)
Hudu=Du*3.14159265/180
end
我忘记了翻译语言的格式,你自己完善以下看。
然后使用的时候就可以引用了:
sin(Hudu(30))
板凳
nosper [专家分:60] 发布于 2007-04-22 14:50:00
这样呀!
谢谢老大悲伤了:)[em12]
但是我是想试着遍一个计算圆周率近似值的程序,用正n变形去逼近一个圆,然后用周长除以半径得到它
如果这样的话,就不行了,有更好的方法解决这个计算圆周率近似值的问题么?
3 楼
sjohn [专家分:5600] 发布于 2007-04-22 20:34:00
嗯,1楼说的方法通用性挺好
有的编译器自己给出了实现函数,比如sind, cosd,如果不考虑代码移植,那么用这种内置函数在精度和速度上都会有提高的。
4 楼
asymptotic [专家分:16630] 发布于 2007-04-22 21:11:00
计算圆周率,用 sum( 1/(k*k), k=1,infinity ) = Pi * Pi / 6 试试。
5 楼
nosper [专家分:60] 发布于 2007-04-22 22:42:00
[quote]计算圆周率,用 sum( 1/(k*k), k=1,infinity ) = Pi * Pi / 6 试试。[/quote]
谢谢了
这是欧拉公式吧,我刚查到方法了,用
1-1/3+1/5-1/7+1/9......=pi/4 (Leibniz 定理)
这样也可以
但是我在编程的时候,输入的n只要超过了1000.0,电脑就要报错,麻烦你们帮忙看看:
program main
implicit none
! Variables
real(kind=16) n,k,kill
common kill
real(kind=16), external :: nosper
n=1000.0d0
! Body of main
k = nosper(n)
print *,kill*4.0d0
end program main
recursive real(kind=16) function nosper (n) result (m)
implicit none
real(kind=16) , intent(in) :: n
real(kind=16), save :: count
real(kind=16) :: temp,kill ! 局部变量
common kill
if ( n < 0 ) then ! 不合理的输入
m = -1.0d0 ! 随便设定一个值
write(*,*) "somthing is wrong. n must greater than 1."
return ! n不合理, 直接return
else if ( n <= 1 ) then
m = 1.0d0
count = 1.0d0
return ! 不用再向下递归了, return
end if
! 会执行到这, 代表n>1, 从(n-1)来计算nosper(n-1)
temp = n-1
m = -1.0d0*nosper(temp)
count =count + m/(2.0d0*n-1.0d0)
kill=count
return
end
上面的n=1000.0的时候是可以的得到想要的结果的
但是当n=10000.0的时候,系统就会报错,说是overflow
这个real(kind=16) 应该怎么设置亚?
6 楼
臭石头雪球 [专家分:23030] 发布于 2007-04-22 22:55:00
嗯,查看本版的置顶 FAQ 帖。其中关于如何增大 stack size 的问题。
补充在 VS2005 + IVF9.1 中的设置方法:
属性页,Linker,System,设置 Stack Reserve Size 和其他几个 Size 项目。
7 楼
asymptotic [专家分:16630] 发布于 2007-04-22 23:03:00
我只能说楼主先生不懂这方面的算法呀,告诉你一个收敛的快的级数不用,用一个收敛的很慢的交错级数,诶,有些数学恒等式 并不一定适合 数值计算。
8 楼
nosper [专家分:60] 发布于 2007-04-22 23:08:00
[quote]嗯,查看本版的置顶 FAQ 帖。其中关于如何增大 stack size 的问题。
补充在 VS2005 + IVF9.1 中的设置方法:
属性页,Linker,System,设置 Stack Reserve Size 和其他几个 Size 项目。[/quote]
我把它们都该为100000了,可是调试的时候还是同样的错误
9 楼
nosper [专家分:60] 发布于 2007-04-22 23:10:00
[quote]我只能说楼主先生不懂这方面的算法呀,告诉你一个收敛的快的级数不用,用一个收敛的很慢的交错级数,诶,有些数学恒等式 并不一定适合 数值计算。[/quote]
呵呵,我确实不太懂,刚刚开始研究
难怪我算到1000 pi还只有3.1409....
关于算法有比较好的书么?
10 楼
nosper [专家分:60] 发布于 2007-04-22 23:17:00
我把程序该了下 ,只是计算n的平方,这是对n的输入是没有限制的:
program main
implicit none
! Variables
real(kind=16) n,k
n=100000.0d0
! Body of main
k = n**2
print *,k
end program main
是不是开始的那个程序里面的数据已经超出了计算机支持的范围?
我来回复