24小时热门版块排行榜    

查看: 882  |  回复: 14
当前主题已经存档。
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

jianchaoyv

金虫 (小有名气)

[交流] 【求助】请教fortran90高手!!

program digui
      integer::fac
      print*,fac(40)
end program digui
recursive function fac(n) result(fac_rst)
          integer,intent(in)::n
          integer::fac_rst
                  if(n==0)then
                     fac_rst=1
           else
                    fac_rst=n*fac(n-1)
                  end if
end function

请问高手们为什么实参较大时无法计算??谢谢!!

[ Last edited by woshilsh on 2008-11-29 at 11:10 ]
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

cuicoffee

铁杆木虫 (小有名气)

大多数机器整型数最多是用4个字节存储,也就是kind=4,只有特殊机器(Alpha系统)才能用8字节(也就是kind=8)存储.
grant.tgb  改数据类型做法可以,但是你得不到一个数各个位的具体值,这是浮点数特性造成的.
另,grant.tgb  用的是什么机器,或有无什么方法扩大计算机存储整型数的字节数,

[ Last edited by cuicoffee on 2008-11-29 at 15:48 ]
业精于勤?行成于思?概率多大?
14楼2008-11-29 15:40:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 15 个回答

grant.tgb

木虫 (小有名气)

整型变量不能那么大

★ ★ ★ ★
kuhailangyu(金币+1,VIP+0):谢谢!
coldwind042(金币+3,VIP+0):感谢你的耐心指导!希望以后多参加fortran方面的交流
n*fac(n-1)当n值交大时就超过了FORTRAN中整型变量的最大数值了。所以无法计算。

如你所定义:当n=13时,已经出现问题。

        0           1
           1           1
           2           2
           3           6
           4          24
           5         120
           6         720
           7        5040
           8       40320
           9      362880
          10     3628800
          11    39916800
          12   479001600【从这儿以后的数据都不再可靠!】
          13  1932053504
          14  1278945280
          15  2004310016
          16  2004189184
          17  -288522240
          18  -898433024
          19   109641728
          20 -2102132736
          21 -1195114496
          22  -522715136
          23   862453760
          24  -775946240
          25  2076180480
          26 -1853882368
          27  1484783616
          28 -1375731712
          29 -1241513984
          30  1409286144
          31   738197504
          32 -2147483648
          33 -2147483648
          34           0
          35           0
          36           0
          37           0
          38           0
          39           0
          40           0
2楼2008-11-27 13:38:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jianchaoyv

金虫 (小有名气)

[评价]十分感谢高手指点!!
3楼2008-11-27 13:45:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

grant.tgb

木虫 (小有名气)

改成实型

★ ★ ★ ★
csfn(金币+4,VIP+0):3Q
即把定义  integer::fac 改为   real::fac,同时把 integer::fac_rst改为  real::fac_rst

则可算到n=34,再大也不行了。

如果均改为real*8,则可算到n=170。

以下为过程结果:
1.real

         0   1.000000   
           1   1.000000   
           2   2.000000   
           3   6.000000   
           4   24.00000   
           5   120.0000   
           6   720.0000   
           7   5040.000   
           8   40320.00   
           9   362880.0   
          10   3628800.   
          11  3.9916800E+07
          12  4.7900160E+08
          13  6.2270208E+09
          14  8.7178289E+10
          15  1.3076743E+12
          16  2.0922788E+13
          17  3.5568741E+14
          18  6.4023735E+15
          19  1.2164510E+17
          20  2.4329020E+18
          21  5.1090941E+19
          22  1.1240007E+21
          23  2.5852017E+22
          24  6.2044845E+23
          25  1.5511211E+25
          26  4.0329150E+26
          27  1.0888870E+28
          28  3.0488837E+29
          29  8.8417631E+30
          30  2.6525289E+32
          31  8.2228397E+33
          32  2.6313087E+35
          33  8.6833185E+36
          34  2.9523282E+38
          35 Infinity      
          36 Infinity      
          37 Infinity      
          38 Infinity      
          39 Infinity      
          40 Infinity      
2.real*8

           0   1.00000000000000     
           1   1.00000000000000     
           2   2.00000000000000     
           3   6.00000000000000     
           4   24.0000000000000     
           5   120.000000000000     
           6   720.000000000000     
           7   5040.00000000000     
           8   40320.0000000000     
           9   362880.000000000     
          10   3628800.00000000     
          11   39916800.0000000     
          12   479001600.000000     
          13   6227020800.00000     
          14   87178291200.0000     
          15   1307674368000.00     
          16   20922789888000.0     
          17   355687428096000.     
          18  6.402373705728000E+015
          19  1.216451004088320E+017
          20  2.432902008176640E+018
          21  5.109094217170944E+019
          22  1.124000727777608E+021
          23  2.585201673888498E+022
          24  6.204484017332394E+023
          25  1.551121004333099E+025
          26  4.032914611266057E+026
          27  1.088886945041835E+028
          28  3.048883446117138E+029
          29  8.841761993739701E+030
          30  2.652528598121910E+032
          31  8.222838654177922E+033
          32  2.631308369336935E+035
          33  8.683317618811886E+036
          34  2.952327990396041E+038
          35  1.033314796638614E+040
          36  3.719933267899012E+041
          37  1.376375309122634E+043
          38  5.230226174666010E+044
          39  2.039788208119744E+046
          40  8.159152832478977E+047
          41  3.345252661316380E+049
          42  1.405006117752880E+051
          43  6.041526306337383E+052
          44  2.658271574788449E+054
          45  1.196222208654802E+056
          46  5.502622159812088E+057
          47  2.586232415111682E+059
          48  1.241391559253607E+061
          49  6.082818640342675E+062
          50  3.041409320171338E+064
          51  1.551118753287382E+066
          52  8.065817517094388E+067
          53  4.274883284060025E+069
          54  2.308436973392414E+071
          55  1.269640335365828E+073
          56  7.109985878048635E+074
          57  4.052691950487722E+076
          58  2.350561331282879E+078
          59  1.386831185456899E+080
          60  8.320987112741392E+081
          61  5.075802138772248E+083
          62  3.146997326038794E+085
          63  1.982608315404440E+087
          64  1.268869321858842E+089
          65  8.247650592082472E+090
          66  5.443449390774431E+092
          67  3.647111091818868E+094
          68  2.480035542436831E+096
          69  1.711224524281413E+098
          70  1.197857166996989E+100
          71  8.504785885678622E+101
          72  6.123445837688608E+103
          73  4.470115461512683E+105
          74  3.307885441519386E+107
          75  2.480914081139539E+109
          76  1.885494701666050E+111
          77  1.451830920282858E+113
          78  1.132428117820629E+115
          79  8.946182130782973E+116
          80  7.156945704626378E+118
          81  5.797126020747366E+120
          82  4.753643337012840E+122
          83  3.945523969720657E+124
          84  3.314240134565352E+126
          85  2.817104114380549E+128
          86  2.422709538367272E+130
          87  2.107757298379527E+132
          88  1.854826422573984E+134
          89  1.650795516090845E+136
          90  1.485715964481761E+138
          91  1.352001527678402E+140
          92  1.243841405464130E+142
          93  1.156772507081641E+144
          94  1.087366156656742E+146
          95  1.032997848823905E+148
          96  9.916779348709491E+149
          97  9.619275968248206E+151
          98  9.426890448883242E+153
          99  9.332621544394410E+155
         100  9.332621544394410E+157
         101  9.425947759838354E+159
         102  9.614466715035121E+161
         103  9.902900716486175E+163
         104  1.029901674514562E+166
         105  1.081396758240290E+168
         106  1.146280563734708E+170
         107  1.226520203196137E+172
         108  1.324641819451828E+174
         109  1.443859583202493E+176
         110  1.588245541522742E+178
         111  1.762952551090244E+180
         112  1.974506857221073E+182
         113  2.231192748659812E+184
         114  2.543559733472186E+186
         115  2.925093693493014E+188
         116  3.393108684451897E+190
         117  3.969937160808719E+192
         118  4.684525849754288E+194
         119  5.574585761207603E+196
         120  6.689502913449124E+198
         121  8.094298525273440E+200
         122  9.875044200833598E+202
         123  1.214630436702532E+205
         124  1.506141741511140E+207
         125  1.882677176888925E+209
         126  2.372173242880046E+211
         127  3.012660018457658E+213
         128  3.856204823625803E+215
         129  4.974504222477285E+217
         130  6.466855489220472E+219
         131  8.471580690878817E+221
         132  1.118248651196004E+224
         133  1.487270706090685E+226
         134  1.992942746161518E+228
         135  2.690472707318050E+230
         136  3.659042881952547E+232
         137  5.012888748274990E+234
         138  6.917786472619486E+236
         139  9.615723196941086E+238
         140  1.346201247571752E+241
         141  1.898143759076170E+243
         142  2.695364137888161E+245
         143  3.854370717180071E+247
         144  5.550293832739301E+249
         145  8.047926057471987E+251
         146  1.174997204390910E+254
         147  1.727245890454638E+256
         148  2.556323917872864E+258
         149  3.808922637630567E+260
         150  5.713383956445850E+262
         151  8.627209774233235E+264
         152  1.311335885683452E+267
         153  2.006343905095681E+269
         154  3.089769613847349E+271
         155  4.789142901463391E+273
         156  7.471062926282891E+275
         157  1.172956879426414E+278
         158  1.853271869493734E+280
         159  2.946702272495037E+282
         160  4.714723635992059E+284
         161  7.590705053947215E+286
         162  1.229694218739449E+289
         163  2.004401576545302E+291
         164  3.287218585534294E+293
         165  5.423910666131586E+295
         166  9.003691705778433E+297
         167  1.503616514864998E+300
         168  2.526075744973197E+302
         169  4.269068009004703E+304
         170  7.257415615307994E+306
         171 Infinity               
         172 Infinity               
         173 Infinity               
         174 Infinity               
         175 Infinity               
-----------------------
以上中,前列数字为n值
4楼2008-11-27 13:46:06
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见