# 7.1. Arbitrary Precision Integers#

In addition to the regular integer and floating point data types, Julia supports arbitrary precision arithmetic.

## 7.1.1. Arbitrary precision integers#

The BigInt data type represents arbitrarily large integers. You can create a BigInt by passing an integer:

BigInt(1234)

1234


But note that the number (1234 in this example) will first be interpreted as an Int64, and then converted to a BigInt. This means you cannot create larger numbers than what Int64 supports using this syntax:

BigInt(typemax(Int64) + 1)    # Incorrect - overflow

-9223372036854775808


However, expressions involving BigInt objects will automatically be evaluated using the higher precision:

BigInt(typemax(Int64)) + 1    # Correct - evaluated using higher precision

9223372036854775808


Another option is to create the BigInt object using a string syntax, which supports arbitrary lengths:

parse(BigInt, "12345678901234567890")

12345678901234567890


Since Julia automatically will use the higher precision arithmetics for BigInt objects, many of the existing functions and user functions will work without any changes:

factorial(BigInt(30))            # Would have given overflow with Int64

265252859812191058636308480000000


## 7.1.2. Example: Largest exponential#

Project Euler, problem 99:

Comparing two numbers written in index form like $$2^{11}$$ and $$3^7$$ is not difficult, as any calculator would confirm that $$2^{11} = 2048 < 3^7 = 2187$$.

However, confirming that $$632382^{518061} > 519432^{525806}$$ would be much more difficult, as both numbers contain over three million digits.

Using base_exp.txt (right click and ‘Save Link/Target As…’), a 22K text file containing one thousand lines with a base/exponent pair on each line, determine which line number has the greatest numerical value.

NOTE: The first two lines in the file represent the numbers in the example given above.

This problem is trivial to solve using BigInt numbers. First define an array with the numbers provided in the text file:

base_exp = [519432 525806; 632382 518061; 78864 613712; 466580 530130; 780495 510032; 525895 525320; 15991 714883; 960290 502358; 760018 511029; 166800 575487; 210884 564478; 555151 523163; 681146 515199; 563395 522587; 738250 512126; 923525 503780; 595148 520429; 177108 572629; 750923 511482; 440902 532446; 881418 505504; 422489 534197; 979858 501616; 685893 514935; 747477 511661; 167214 575367; 234140 559696; 940238 503122; 728969 512609; 232083 560102; 900971 504694; 688801 514772; 189664 569402; 891022 505104; 445689 531996; 119570 591871; 821453 508118; 371084 539600; 911745 504251; 623655 518600; 144361 582486; 352442 541775; 420726 534367; 295298 549387; 6530 787777; 468397 529976; 672336 515696; 431861 533289; 84228 610150; 805376 508857; 444409 532117; 33833 663511; 381850 538396; 402931 536157; 92901 604930; 304825 548004; 731917 512452; 753734 511344; 51894 637373; 151578 580103; 295075 549421; 303590 548183; 333594 544123; 683952 515042; 60090 628880; 951420 502692; 28335 674991; 714940 513349; 343858 542826; 549279 523586; 804571 508887; 260653 554881; 291399 549966; 402342 536213; 408889 535550; 40328 652524; 375856 539061; 768907 510590; 165993 575715; 976327 501755; 898500 504795; 360404 540830; 478714 529095; 694144 514472; 488726 528258; 841380 507226; 328012 544839; 22389 690868; 604053 519852; 329514 544641; 772965 510390; 492798 527927; 30125 670983; 895603 504906; 450785 531539; 840237 507276; 380711 538522; 63577 625673; 76801 615157; 502694 527123; 597706 520257; 310484 547206; 944468 502959; 121283 591152; 451131 531507; 566499 522367; 425373 533918; 40240 652665; 39130 654392; 714926 513355; 469219 529903; 806929 508783; 287970 550487; 92189 605332; 103841 599094; 671839 515725; 452048 531421; 987837 501323; 935192 503321; 88585 607450; 613883 519216; 144551 582413; 647359 517155; 213902 563816; 184120 570789; 258126 555322; 502546 527130; 407655 535678; 401528 536306; 477490 529193; 841085 507237; 732831 512408; 833000 507595; 904694 504542; 581435 521348; 455545 531110; 873558 505829; 94916 603796; 720176 513068; 545034 523891; 246348 557409; 556452 523079; 832015 507634; 173663 573564; 502634 527125; 250732 556611; 569786 522139; 216919 563178; 521815 525623; 92304 605270; 164446 576167; 753413 511364; 11410 740712; 448845 531712; 925072 503725; 564888 522477; 7062 780812; 641155 517535; 738878 512100; 636204 517828; 372540 539436; 443162 532237; 571192 522042; 655350 516680; 299741 548735; 581914 521307; 965471 502156; 513441 526277; 808682 508700; 237589 559034; 543300 524025; 804712 508889; 247511 557192; 543486 524008; 504383 526992; 326529 545039; 792493 509458; 86033 609017; 126554 589005; 579379 521481; 948026 502823; 404777 535969; 265767 554022; 266876 553840; 46631 643714; 492397 527958; 856106 506581; 795757 509305; 748946 511584; 294694 549480; 409781 535463; 775887 510253; 543747 523991; 210592 564536; 517119 525990; 520253 525751; 247926 557124; 592141 520626; 346580 542492; 544969 523902; 506501 526817; 244520 557738; 144745 582349; 69274 620858; 292620 549784; 926027 503687; 736320 512225; 515528 526113; 407549 535688; 848089 506927; 24141 685711; 9224 757964; 980684 501586; 175259 573121; 489160 528216; 878970 505604; 969546 502002; 525207 525365; 690461 514675; 156510 578551; 659778 516426; 468739 529945; 765252 510770; 76703 615230; 165151 575959; 29779 671736; 928865 503569; 577538 521605; 927555 503618; 185377 570477; 974756 501809; 800130 509093; 217016 563153; 365709 540216; 774508 510320; 588716 520851; 631673 518104; 954076 502590; 777828 510161; 990659 501222; 597799 520254; 786905 509727; 512547 526348; 756449 511212; 869787 505988; 653747 516779; 84623 609900; 839698 507295; 30159 670909; 797275 509234; 678136 515373; 897144 504851; 989554 501263; 413292 535106; 55297 633667; 788650 509637; 486748 528417; 150724 580377; 56434 632490; 77207 614869; 588631 520859; 611619 519367; 100006 601055; 528924 525093; 190225 569257; 851155 506789; 682593 515114; 613043 519275; 514673 526183; 877634 505655; 878905 505602; 1926 914951; 613245 519259; 152481 579816; 841774 507203; 71060 619442; 865335 506175; 90244 606469; 302156 548388; 399059 536557; 478465 529113; 558601 522925; 69132 620966; 267663 553700; 988276 501310; 378354 538787; 529909 525014; 161733 576968; 758541 511109; 823425 508024; 149821 580667; 269258 553438; 481152 528891; 120871 591322; 972322 501901; 981350 501567; 676129 515483; 950860 502717; 119000 592114; 392252 537272; 191618 568919; 946699 502874; 289555 550247; 799322 509139; 703886 513942; 194812 568143; 261823 554685; 203052 566221; 217330 563093; 734748 512313; 391759 537328; 807052 508777; 564467 522510; 59186 629748; 113447 594545; 518063 525916; 905944 504492; 613922 519213; 439093 532607; 445946 531981; 230530 560399; 297887 549007; 459029 530797; 403692 536075; 855118 506616; 963127 502245; 841711 507208; 407411 535699; 924729 503735; 914823 504132; 333725 544101; 176345 572832; 912507 504225; 411273 535308; 259774 555036; 632853 518038; 119723 591801; 163902 576321; 22691 689944; 402427 536212; 175769 572988; 837260 507402; 603432 519893; 313679 546767; 538165 524394; 549026 523608; 61083 627945; 898345 504798; 992556 501153; 369999 539727; 32847 665404; 891292 505088; 152715 579732; 824104 507997; 234057 559711; 730507 512532; 960529 502340; 388395 537687; 958170 502437; 57105 631806; 186025 570311; 993043 501133; 576770 521664; 215319 563513; 927342 503628; 521353 525666; 39563 653705; 752516 511408; 110755 595770; 309749 547305; 374379 539224; 919184 503952; 990652 501226; 647780 517135; 187177 570017; 168938 574877; 649558 517023; 278126 552016; 162039 576868; 658512 516499; 498115 527486; 896583 504868; 561170 522740; 747772 511647; 775093 510294; 652081 516882; 724905 512824; 499707 527365; 47388 642755; 646668 517204; 571700 522007; 180430 571747; 710015 513617; 435522 532941; 98137 602041; 759176 511070; 486124 528467; 526942 525236; 878921 505604; 408313 535602; 926980 503640; 882353 505459; 566887 522345; 3326 853312; 911981 504248; 416309 534800; 392991 537199; 622829 518651; 148647 581055; 496483 527624; 666314 516044; 48562 641293; 672618 515684; 443676 532187; 274065 552661; 265386 554079; 347668 542358; 31816 667448; 181575 571446; 961289 502320; 365689 540214; 987950 501317; 932299 503440; 27388 677243; 746701 511701; 492258 527969; 147823 581323; 57918 630985; 838849 507333; 678038 515375; 27852 676130; 850241 506828; 818403 508253; 131717 587014; 850216 506834; 904848 504529; 189758 569380; 392845 537217; 470876 529761; 925353 503711; 285431 550877; 454098 531234; 823910 508003; 318493 546112; 766067 510730; 261277 554775; 421530 534289; 694130 514478; 120439 591498; 213308 563949; 854063 506662; 365255 540263; 165437 575872; 662240 516281; 289970 550181; 847977 506933; 546083 523816; 413252 535113; 975829 501767; 361540 540701; 235522 559435; 224643 561577; 736350 512229; 328303 544808; 35022 661330; 307838 547578; 474366 529458; 873755 505819; 73978 617220; 827387 507845; 670830 515791; 326511 545034; 309909 547285; 400970 536363; 884827 505352; 718307 513175; 28462 674699; 599384 520150; 253565 556111; 284009 551093; 343403 542876; 446557 531921; 992372 501160; 961601 502308; 696629 514342; 919537 503945; 894709 504944; 892201 505051; 358160 541097; 448503 531745; 832156 507636; 920045 503924; 926137 503675; 416754 534757; 254422 555966; 92498 605151; 826833 507873; 660716 516371; 689335 514746; 160045 577467; 814642 508425; 969939 501993; 242856 558047; 76302 615517; 472083 529653; 587101 520964; 99066 601543; 498005 527503; 709800 513624; 708000 513716; 20171 698134; 285020 550936; 266564 553891; 981563 501557; 846502 506991; 334 1190800; 209268 564829; 9844 752610; 996519 501007; 410059 535426; 432931 533188; 848012 506929; 966803 502110; 983434 501486; 160700 577267; 504374 526989; 832061 507640; 392825 537214; 443842 532165; 440352 532492; 745125 511776; 13718 726392; 661753 516312; 70500 619875; 436952 532814; 424724 533973; 21954 692224; 262490 554567; 716622 513264; 907584 504425; 60086 628882; 837123 507412; 971345 501940; 947162 502855; 139920 584021; 68330 621624; 666452 516038; 731446 512481; 953350 502619; 183157 571042; 845400 507045; 651548 516910; 20399 697344; 861779 506331; 629771 518229; 801706 509026; 189207 569512; 737501 512168; 719272 513115; 479285 529045; 136046 585401; 896746 504860; 891735 505067; 684771 514999; 865309 506184; 379066 538702; 503117 527090; 621780 518717; 209518 564775; 677135 515423; 987500 501340; 197049 567613; 329315 544673; 236756 559196; 357092 541226; 520440 525733; 213471 563911; 956852 502490; 702223 514032; 404943 535955; 178880 572152; 689477 514734; 691351 514630; 866669 506128; 370561 539656; 739805 512051; 71060 619441; 624861 518534; 261660 554714; 366137 540160; 166054 575698; 601878 519990; 153445 579501; 279899 551729; 379166 538691; 423209 534125; 675310 515526; 145641 582050; 691353 514627; 917468 504026; 284778 550976; 81040 612235; 161699 576978; 616394 519057; 767490 510661; 156896 578431; 427408 533714; 254849 555884; 737217 512182; 897133 504851; 203815 566051; 270822 553189; 135854 585475; 778805 510111; 784373 509847; 305426 547921; 733418 512375; 732087 512448; 540668 524215; 702898 513996; 628057 518328; 640280 517587; 422405 534204; 10604 746569; 746038 511733; 839808 507293; 457417 530938; 479030 529064; 341758 543090; 620223 518824; 251661 556451; 561790 522696; 497733 527521; 724201 512863; 489217 528217; 415623 534867; 624610 518548; 847541 506953; 432295 533249; 400391 536421; 961158 502319; 139173 584284; 421225 534315; 579083 521501; 74274 617000; 701142 514087; 374465 539219; 217814 562985; 358972 540995; 88629 607424; 288597 550389; 285819 550812; 538400 524385; 809930 508645; 738326 512126; 955461 502535; 163829 576343; 826475 507891; 376488 538987; 102234 599905; 114650 594002; 52815 636341; 434037 533082; 804744 508880; 98385 601905; 856620 506559; 220057 562517; 844734 507078; 150677 580387; 558697 522917; 621751 518719; 207067 565321; 135297 585677; 932968 503404; 604456 519822; 579728 521462; 244138 557813; 706487 513800; 711627 513523; 853833 506674; 497220 527562; 59428 629511; 564845 522486; 623621 518603; 242689 558077; 125091 589591; 363819 540432; 686453 514901; 656813 516594; 489901 528155; 386380 537905; 542819 524052; 243987 557841; 693412 514514; 488484 528271; 896331 504881; 336730 543721; 728298 512647; 604215 519840; 153729 579413; 595687 520398; 540360 524240; 245779 557511; 924873 503730; 509628 526577; 528523 525122; 3509 847707; 522756 525555; 895447 504922; 44840 646067; 45860 644715; 463487 530404; 398164 536654; 894483 504959; 619415 518874; 966306 502129; 990922 501212; 835756 507474; 548881 523618; 453578 531282; 474993 529410; 80085 612879; 737091 512193; 50789 638638; 979768 501620; 792018 509483; 665001 516122; 86552 608694; 462772 530469; 589233 520821; 891694 505072; 592605 520594; 209645 564741; 42531 649269; 554376 523226; 803814 508929; 334157 544042; 175836 572970; 868379 506051; 658166 516520; 278203 551995; 966198 502126; 627162 518387; 296774 549165; 311803 547027; 843797 507118; 702304 514032; 563875 522553; 33103 664910; 191932 568841; 543514 524006; 506835 526794; 868368 506052; 847025 506971; 678623 515342; 876139 505726; 571997 521984; 598632 520198; 213590 563892; 625404 518497; 726508 512738; 689426 514738; 332495 544264; 411366 535302; 242546 558110; 315209 546555; 797544 509219; 93889 604371; 858879 506454; 124906 589666; 449072 531693; 235960 559345; 642403 517454; 720567 513047; 705534 513858; 603692 519870; 488137 528302; 157370 578285; 63515 625730; 666326 516041; 619226 518883; 443613 532186; 597717 520257; 96225 603069; 86940 608450; 40725 651929; 460976 530625; 268875 553508; 270671 553214; 363254 540500; 384248 538137; 762889 510892; 377941 538833; 278878 551890; 176615 572755; 860008 506412; 944392 502967; 608395 519571; 225283 561450; 45095 645728; 333798 544090; 625733 518476; 995584 501037; 506135 526853; 238050 558952; 557943 522972; 530978 524938; 634244 517949; 177168 572616; 85200 609541; 953043 502630; 523661 525484; 999295 500902; 840803 507246; 961490 502312; 471747 529685; 380705 538523; 911180 504275; 334149 544046; 478992 529065; 325789 545133; 335884 543826; 426976 533760; 749007 511582; 667067 516000; 607586 519623; 674054 515599; 188534 569675; 565185 522464; 172090 573988; 87592 608052; 907432 504424; 8912 760841; 928318 503590; 757917 511138; 718693 513153; 315141 546566; 728326 512645; 353492 541647; 638429 517695; 628892 518280; 877286 505672; 620895 518778; 385878 537959; 423311 534113; 633501 517997; 884833 505360; 883402 505416; 999665 500894; 708395 513697; 548142 523667; 756491 511205; 987352 501340; 766520 510705; 591775 520647; 833758 507563; 843890 507108; 925551 503698; 74816 616598; 646942 517187; 354923 541481; 256291 555638; 634470 517942; 930904 503494; 134221 586071; 282663 551304; 986070 501394; 123636 590176; 123678 590164; 481717 528841; 423076 534137; 866246 506145; 93313 604697; 783632 509880; 317066 546304; 502977 527103; 141272 583545; 71708 618938; 617748 518975; 581190 521362; 193824 568382; 682368 515131; 352956 541712; 351375 541905; 505362 526909; 905165 504518; 128645 588188; 267143 553787; 158409 577965; 482776 528754; 628896 518282; 485233 528547; 563606 522574; 111001 595655; 115920 593445; 365510 540237; 959724 502374; 938763 503184; 930044 503520; 970959 501956; 913658 504176; 68117 621790; 989729 501253; 567697 522288; 820427 508163; 54236 634794; 291557 549938; 124961 589646; 403177 536130; 405421 535899; 410233 535417; 815111 508403; 213176 563974; 83099 610879; 998588 500934; 513640 526263; 129817 587733; 1820 921851; 287584 550539; 299160 548820; 860621 506386; 529258 525059; 586297 521017; 953406 502616; 441234 532410; 986217 501386; 781938 509957; 461247 530595; 735424 512277; 146623 581722; 839838 507288; 510667 526494; 935085 503327; 737523 512167; 303455 548204; 992779 501145; 60240 628739; 939095 503174; 794368 509370; 501825 527189; 459028 530798; 884641 505363; 512287 526364; 835165 507499; 307723 547590; 160587 577304; 735043 512300; 493289 527887; 110717 595785; 306480 547772; 318593 546089; 179810 571911; 200531 566799; 314999 546580; 197020 567622; 301465 548487; 237808 559000; 131944 586923; 882527 505449; 468117 530003; 711319 513541; 156240 578628; 965452 502162; 992756 501148; 437959 532715; 739938 512046; 614249 519196; 391496 537356; 62746 626418; 688215 514806; 75501 616091; 883573 505412; 558824 522910; 759371 511061; 173913 573489; 891351 505089; 727464 512693; 164833 576051; 812317 508529; 540320 524243; 698061 514257; 69149 620952; 471673 529694; 159092 577753; 428134 533653; 89997 606608; 711061 513557; 779403 510081; 203327 566155; 798176 509187; 667688 515963; 636120 517833; 137410 584913; 217615 563034; 556887 523038; 667229 515991; 672276 515708; 325361 545187; 172115 573985; 13846 725685]

1000×2 Matrix{Int64}:
519432  525806
632382  518061
78864  613712
466580  530130
780495  510032
525895  525320
15991  714883
960290  502358
760018  511029
166800  575487
210884  564478
555151  523163
681146  515199
⋮
203327  566155
798176  509187
667688  515963
636120  517833
137410  584913
217615  563034
556887  523038
667229  515991
672276  515708
325361  545187
172115  573985
13846  725685


Next compute all the exponentials using BigInt and find the largest:

Warning: the following computation my require more memory than Datahub provides for the notebook. If you run out of memory and wish to complete the computation, you may download the notebook and run it on your local machine.

bases = base_exp[:,1]
exponents = base_exp[:,2]
values = BigInt.(bases) .^ BigInt.(exponents)
max_value, max_idx = findmax(values)
println("Largest value on row ", max_idx, ": ", bases[max_idx], "^", exponents[max_idx])

Largest value on row 709: 895447^504922