| 计算机里用字节表示一个数,字节总是有限的,无法表达无穷的实数。 
 所以,永远记住,浮点数既有表达范围,又有表达精度。(都是有限的)
 
 100级次,算200的阶乘,计算机无法容纳如此巨大的数。我试了一下,real(16) 是可以的(如果你的编译器允许real(16)的话)
 
 所以造成了浮点数溢出。
 
 一般是通过算法来解决,这本例中,fact 和 p 的值在后面是没有作用的,所以可以放一起,存放 p/fact 的值。虽然 p 和 fact 都是很大的数,但是他们除掉以后,就不大了。
 
 
 [Fortran] syntaxhighlighter_viewsource syntaxhighlighter_copycode Program www_fcode_cn
  Implicit None
  INTEGER SIGN , i , n
  Real :: x , sum , fact , p
  READ *, N, X
  SUM = X
  SIGN = 1
  P = X
  DO I = 2 , N
    SIGN = (-1)*SIGN
    !FACT = FACT * (2.0*I-2) * (2.0*I-1)
    P = P * X**2 / ( (2.0*I-2) * (2.0*I-1) )
    SUM = SUM + SIGN * P
  End Do
  PRINT *, SUM
End Program www_fcode_cn |