[seqfan] Fwd: Re: Factorials (A000142) "compressed" through the int data type

Hugo Pfoertner yae9911 at gmail.com
Fri Jun 30 00:53:25 CEST 2017


Being an addict of old-fashioned Fortran, I have computed the factorials
using various signed data types, e.g. Integers with 4 and 8 bytes, and
floating point types with 4, 8 and 16 bytes. Whereas the floats usually
have a built-in overflow management defined in IEEE 754, the default for
integers is the well known overflow via modulo operations. Of course one
can instruct the compilers to build code to catch integer overflows, but
that then masks the behavior of the hardware for the multiplication. See
the following table (n, I*4, I*8, R*4, R*8, R*16)
           2           2                    2   2.00000000
2.0000000000000000        2.00000000000000000000000000000000000
           3           6                    6   6.00000000
6.0000000000000000        6.00000000000000000000000000000000000
           4          24                   24   24.0000000
24.000000000000000        24.0000000000000000000000000000000000
           5         120                  120   120.000000
120.00000000000000        120.000000000000000000000000000000000
           6         720                  720   720.000000
720.00000000000000        720.000000000000000000000000000000000
           7        5040                 5040   5040.00000
5040.0000000000000        5040.00000000000000000000000000000000
           8       40320                40320   40320.0000
40320.000000000000        40320.0000000000000000000000000000000
           9      362880               362880   362880.000
362880.00000000000        362880.000000000000000000000000000000
          10     3628800              3628800   3628800.00
3628800.0000000000        3628800.00000000000000000000000000000
          11    39916800             39916800   39916800.0
39916800.000000000        39916800.0000000000000000000000000000
          12   479001600            479001600   479001600.
479001600.00000000        479001600.000000000000000000000000000
          13  1932053504           6227020800 <(622)%20702-0800>
6.22702080E+09   6227020800.0000000        6227020800.
00000000000000000000000000
          14  1278945280          87178291200   8.71782892E+10
87178291200.000000        87178291200.0000000000000000000000000
          15  2004310016        1307674368000   1.30767428E+12
1307674368000.0000        1307674368000.00000000000000000000000
          16  2004189184       20922789888000   2.09227885E+13
20922789888000.000        20922789888000.0000000000000000000000
          17  -288522240      355687428096000   3.55687415E+14
355687428096000.00        355687428096000.000000000000000000000
          18  -898433024     6402373705728000   6.40237353E+15
6402373705728000.0        6402373705728000.00000000000000000000
          19   109641728   121645100408832000   1.21645096E+17
1.2164510040883200E+017   121645100408832000.000000000000000000
          20 -2102132736 <(210)%20213-2736>  2432902008176640000
2.43290202E+18   2.4329020081766400E+018
2432902008176640000.00000000000000000

          21 -1195114496 -4249290049419214848   5.10909408E+19
5.1090942171709440E+019   51090942171709440000.0000000000000000
          22  -522715136 -1250660718674968576   1.12400072E+21
1.1240007277776077E+021   1124000727777607680000.00000000000000
          23   862453760  8128291617894825984   2.58520174E+22
2.5852016738884978E+022   25852016738884976640000.0000000000000
          24  -775946240 -7835185981329244160   6.20448455E+23
6.2044840173323941E+023   620448401733239439360000.000000000000
          25  2076180480 <(207)%20618-0480>  7034535277573963776
1.55112111E+25   1.5511210043330986E+025
15511210043330985984000000.0000000000

          26 -1853882368 -1569523520172457984   4.03291500E+26
4.0329146112660565E+026   403291461126605635584000000.000000000
          27  1484783616 -5483646897237262336   1.08888704E+28
1.0888869450418352E+028   10888869450418352160768000000.0000000
          28 -1375731712 -5968160532966932480   3.04888372E+29
3.0488834461171384E+029   304888344611713860501504000000.000000
          29 -1241513984 -7055958792655077376   8.84176308E+30
8.8417619937397008E+030   8841761993739701954543616000000.00000
          30  1409286144 -8764578968847253504   2.65252890E+32
2.6525285981219103E+032   265252859812191058636308480000000.000
          31   738197504  4999213071378415616   8.22283969E+33
8.2228386541779224E+033   8222838654177922817725562880000000.00
          32 -2147483648 <(214)%20748-3648> -6045878379276664832
2.63130870E+35   2.6313083693369352E+035
263130836933693530167218012160000000.

          33 -2147483648 <(214)%20748-3648>  3400198294675128320
8.68331851E+36   8.6833176188118859E+036   8.683317618811886495518194401280
00000E+0036
          34           0  4926277576697053184   2.95232823E+38
2.9523279903960412E+038   2.95232799039604140847618609643520000E+0038
          35           0  6399018521010896896         Infinity
1.0333147966386144E+040   1.03331479663861449296666513375232000E+0040
          36           0  9003737871877668864         Infinity
3.7199332678990118E+041   3.71993326789901217467999448150835200E+0041
          37           0  1096907932701818880         Infinity
1.3763753091226343E+043   1.37637530912263450463159795815809024E+0043
          38           0  4789013295250014208         Infinity
5.2302261746660104E+044   5.23022617466601111760007224100074326E+0044
          39           0  2304077777655037952         Infinity
2.0397882081197442E+046   2.03978820811974433586402817399028990E+0046
          40           0   -70609262346240000         Infinity
8.1591528324789768E+047   8.15915283247897734345611269596115994E+0047
          41           0 -2894979756195840000         Infinity
3.3452526613163803E+049   3.34525266131638071081700620534407553E+0049
          42           0  7538058755741581312         Infinity
1.4050061177528798E+051   1.40500611775287989854314260624451167E+0051
          43           0 -7904866829883932672         Infinity
6.0415263063373834E+052   6.04152630633738356373551320685140054E+0052
          44           0  2673996885588443136         Infinity
2.6582715747884485E+054   2.65827157478844876804362581101461616E+0054
          45           0 -8797348664486920192         Infinity
1.1962222086548019E+056   1.19622220865480194561963161495657732E+0056
          46           0  1150331055211806720         Infinity
5.5026221598120885E+057   5.50262215981208894985030542880025565E+0057
          47           0 -1274672626173739008         Infinity
2.5862324151116818E+059   2.58623241511168180642964355153612013E+0059
          48           0 -5844053835210817536         Infinity
1.2413915592536073E+061   1.24139155925360726708622890473733766E+0061
          49           0  8789267254022766592         Infinity
6.0828186403426752E+062   6.08281864034267560872252163321295418E+0062
          50           0 -3258495067890909184         Infinity
3.0414093201713376E+064   3.04140932017133780436126081660647707E+0064
          51           0  -162551799050403840         Infinity
1.5511187532873822E+066   1.55111875328738228022424301646930328E+0066
          52           0 -8452693550620999680         Infinity
8.0658175170943877E+067   8.06581751709438785716606368564037680E+0067
          53           0 -5270900413883744256         Infinity
4.2748832840600255E+069   4.27488328406002556429801375338939947E+0069
          54           0 -7927461244078915584         Infinity
2.3084369733924138E+071   2.30843697339241380472092742683027573E+0071
          55           0  6711489344688881664         Infinity
1.2696403353658276E+073   1.26964033536582759259651008475665158E+0073
          56           0  6908521828386340864         Infinity
7.1099858780486348E+074   7.10998587804863451854045647463724864E+0074
          57           0  6404118670120845312         Infinity
4.0526919504877221E+076   4.05269195048772167556806019054323162E+0076
          58           0  2504001392817995776         Infinity
2.3505613312828789E+078   2.35056133128287857182947491051507425E+0078
          59           0   162129586585337856         Infinity
1.3868311854568986E+080   1.38683118545689835737939019720389389E+0080
          60           0 -8718968878589280256         Infinity
8.3209871127413916E+081   8.32098711274139014427634118322336324E+0081
          61           0  3098476543630901248         Infinity
5.0758021387722484E+083   5.07580213877224798800856812176625148E+0083
          62           0  7638104968020361216         Infinity
3.1469973260387939E+085   3.14699732603879375256531223549507605E+0085
          63           0  1585267068834414592         Infinity
1.9826083154044401E+087   1.98260831540444006411614670836189795E+0087
          64           0 -9223372036854775808         Infinity
1.2688693218588417E+089   1.26886932185884164103433389335161469E+0089
          65           0 -9223372036854775808         Infinity
8.2476505920824715E+090   8.24765059208247066672317030678549621E+0090
          66           0                    0         Infinity
5.4434493907744307E+092   5.44344939077443064003729240247842700E+0092
          67           0                    0         Infinity
3.6471110918188683E+094   3.64711109181886852882498590966054603E+0094
          68           0                    0         Infinity
2.4800355424368305E+096   2.48003554243683059960099041856917120E+0096
          69           0                    0         Infinity
1.7112245242814130E+098   1.71122452428141311372468338881272819E+0098

part snipped to avoid size limit of posting

         150           0                    0         Infinity
5.7133839564458505E+262   5.71338395644585459047893286526105041E+0262
         151           0                    0         Infinity
8.6272097742332346E+264   8.62720977423324043162318862654418613E+0264
         152           0                    0         Infinity
1.3113358856834518E+267   1.31133588568345254560672467123471620E+0267
         153           0                    0         Infinity
2.0063439050956811E+269   2.00634390509568239477828874698911584E+0269
         154           0                    0         Infinity
3.0897696138473489E+271   3.08976961384735088795856467036323855E+0271
         155           0                    0         Infinity
4.7891429014633912E+273   4.78914290146339387633577523906301967E+0273
         156           0                    0         Infinity
7.4710629262828905E+275   7.47106292628289444708380937293831095E+0275
         157           0                    0         Infinity
1.1729568794264138E+278   1.17295687942641442819215807155131486E+0278
         158           0                    0         Infinity
1.8532718694937338E+280   1.85327186949373479654360975305107745E+0280
         159           0                    0         Infinity
2.9467022724950369E+282   2.94670227249503832650433950735121292E+0282
         160           0                    0         Infinity
4.7147236359920590E+284   4.71472363599206132240694321176194039E+0284
         161           0                    0         Infinity
7.5907050539472148E+286   7.59070505394721872907517857093672421E+0286
         162           0                    0         Infinity
1.2296942187394488E+289   1.22969421873944943411017892849174933E+0289
         163           0                    0         Infinity
2.0044015765453015E+291   2.00440157654530257759959165344155130E+0291
         164           0                    0         Infinity
3.2872185855342945E+293   3.28721858553429622726333031164414401E+0293
         165           0                    0         Infinity
5.4239106661315860E+295   5.42391066613158877498449501421283772E+0295
         166           0                    0         Infinity
9.0036917057784329E+297   9.00369170577843736647426172359331091E+0297
         167           0                    0         Infinity
1.5036165148649983E+300   1.50361651486499904020120170784008294E+0300
         168           0                    0         Infinity
2.5260757449731969E+302   2.52607574497319838753801886917133935E+0302
         169           0                    0         Infinity
4.2690680090047027E+304   4.26906800900470527493925188889956336E+0304
         170           0                    0         Infinity
7.2574156153079940E+306   7.25741561530799896739672821112925725E+0306
         171           0                    0
Infinity                  Infinity   1.241018070217667823424840524103
10298E+0309
         172           0                    0
Infinity                  Infinity   2.134551080774388656290725701457
33724E+0311
         173           0                    0
Infinity                  Infinity   3.692773369739692375382955463521
19357E+0313
         174           0                    0
Infinity                  Infinity   6.425425663347064733166342506526
87658E+0315
         175           0                    0
Infinity                  Infinity   1.124449491085736328304109938642
20335E+0318
         176           0                    0
Infinity                  Infinity   1.979031104310895937815233492010
27800E+0320
         177           0                    0
Infinity                  Infinity   3.502885054630285809932963280858
19212E+0322
         178           0                    0
Infinity                  Infinity   6.235135397241908741680674639927
58195E+0324
         179           0                    0
Infinity                  Infinity   1.116089236106301664760840760547
03709E+0327
         180           0                    0
Infinity                  Infinity   2.008960624991342996569513368984
66673E+0329

It would take quite a while until the 16 byte floats would overflow, but if
implemented as defined in the standard also there Infinity would appear.



More information about the SeqFan mailing list