| 查看: 883 | 回复: 14 | |||
| 当前主题已经存档。 | |||
[交流]
【求助】请教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 ] |
» 猜你喜欢
假如你的研究生提出不合理要求
已经有12人回复
实验室接单子
已经有7人回复
全日制(定向)博士
已经有5人回复
萌生出自己或许不适合搞科研的想法,现在跑or等等看?
已经有4人回复
Materials Today Chemistry审稿周期
已经有4人回复
参与限项
已经有3人回复
对氯苯硼酸纯化
已经有3人回复
所感
已经有4人回复
要不要辞职读博?
已经有7人回复
北核录用
已经有3人回复
grant.tgb
木虫 (小有名气)
- 应助: 1 (幼儿园)
- 金币: 2734.1
- 帖子: 170
- 在线: 41.1小时
- 虫号: 425534
- 注册: 2007-07-27
- 性别: GG
- 专业: 金属材料的力学行为
整型变量不能那么大
★ ★ ★ ★
kuhailangyu(金币+1,VIP+0):谢谢!
coldwind042(金币+3,VIP+0):感谢你的耐心指导!希望以后多参加fortran方面的交流
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
3楼2008-11-27 13:45:20
grant.tgb
木虫 (小有名气)
- 应助: 1 (幼儿园)
- 金币: 2734.1
- 帖子: 170
- 在线: 41.1小时
- 虫号: 425534
- 注册: 2007-07-27
- 性别: GG
- 专业: 金属材料的力学行为
改成实型
★ ★ ★ ★
csfn(金币+4,VIP+0):3Q
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
5楼2008-11-27 13:51:06
grant.tgb
木虫 (小有名气)
- 应助: 1 (幼儿园)
- 金币: 2734.1
- 帖子: 170
- 在线: 41.1小时
- 虫号: 425534
- 注册: 2007-07-27
- 性别: GG
- 专业: 金属材料的力学行为
6楼2008-11-27 13:57:01
|
太感谢了!! 如果我用种别参数可以整型变量最大值的范围吗? 如:program digui integer(kind=8)::fac print*,fac(40) end program digui recursive function fac(n) result(fac_rst) integer(kind=8),intent(in)::n integer(kind=8)::fac_rst if(n==0)then fac_rst=1 else fac_rst=n*fac(n-1) end if end function 整型变量的种别参数是1,2,4,8 为何我取kind=8连错误结果也没有,根本不运行呢? 谢谢好心人!! |
7楼2008-11-27 14:00:39
grant.tgb
木虫 (小有名气)
- 应助: 1 (幼儿园)
- 金币: 2734.1
- 帖子: 170
- 在线: 41.1小时
- 虫号: 425534
- 注册: 2007-07-27
- 性别: GG
- 专业: 金属材料的力学行为
也运行啊,不过也只能算到20
★ ★
csfn(金币+2,VIP+0):3Q
csfn(金币+2,VIP+0):3Q
|
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 6227020800 14 87178291200 15 1307674368000 16 20922789888000 17 355687428096000 18 6402373705728000 19 121645100408832000 20 2432902008176640000 21 -4249290049419214848 22 -1250660718674968576 23 8128291617894825984 24 -7835185981329244160 25 7034535277573963776 26 -1569523520172457984 27 -5483646897237262336 28 -5968160532966932480 29 -7055958792655077376 30 -8764578968847253504 31 4999213071378415616 32 -6045878379276664832 33 3400198294675128320 34 4926277576697053184 35 6399018521010896896 36 9003737871877668864 37 1096907932701818880 38 4789013295250014208 39 2304077777655037952 40 -70609262346240000 |
8楼2008-11-27 14:11:42
9楼2008-11-27 14:45:38
10楼2008-11-27 14:48:47












回复此楼