回 帖 发 新 帖 刷新版面

主题:如何在fortran中运用角度进行计算?

   !如何在fortran中运用角度进行计算?

   !比如我想表示sin(30度)该怎么解决?

new: 在vc2005+ivf9.1中怎么才能多行注释?

回复列表 (共17个回复)

沙发

很简单啦,换算成弧度就可以了
sin(30*3.14159265/180)

当然你也可以设计一个专门的转换子函数
function Hudu(du)
   Hudu=Du*3.14159265/180
end

我忘记了翻译语言的格式,你自己完善以下看。

然后使用的时候就可以引用了:
sin(Hudu(30))

板凳


这样呀!
  谢谢老大悲伤了:)[em12]

    但是我是想试着遍一个计算圆周率近似值的程序,用正n变形去逼近一个圆,然后用周长除以半径得到它
   
    如果这样的话,就不行了,有更好的方法解决这个计算圆周率近似值的问题么?

3 楼

嗯,1楼说的方法通用性挺好

有的编译器自己给出了实现函数,比如sind, cosd,如果不考虑代码移植,那么用这种内置函数在精度和速度上都会有提高的。

4 楼

计算圆周率,用  sum( 1/(k*k),  k=1,infinity ) = Pi * Pi / 6 试试。

5 楼

[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 楼

嗯,查看本版的置顶 FAQ 帖。其中关于如何增大 stack size 的问题。

补充在 VS2005 + IVF9.1 中的设置方法:

属性页,Linker,System,设置 Stack Reserve Size 和其他几个 Size 项目。

7 楼

我只能说楼主先生不懂这方面的算法呀,告诉你一个收敛的快的级数不用,用一个收敛的很慢的交错级数,诶,有些数学恒等式 并不一定适合 数值计算。

8 楼

[quote]嗯,查看本版的置顶 FAQ 帖。其中关于如何增大 stack size 的问题。

补充在 VS2005 + IVF9.1 中的设置方法:

属性页,Linker,System,设置 Stack Reserve Size 和其他几个 Size 项目。[/quote]

   我把它们都该为100000了,可是调试的时候还是同样的错误

9 楼

[quote]我只能说楼主先生不懂这方面的算法呀,告诉你一个收敛的快的级数不用,用一个收敛的很慢的交错级数,诶,有些数学恒等式 并不一定适合 数值计算。[/quote]
   
   呵呵,我确实不太懂,刚刚开始研究

   难怪我算到1000 pi还只有3.1409....

  关于算法有比较好的书么?

10 楼

我把程序该了下 ,只是计算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


是不是开始的那个程序里面的数据已经超出了计算机支持的范围?

我来回复

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