[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