Large numbers are numbers that are significantly larger than those ordinarily used in everyday life, for instance in simple counting or in monetary transactions. The term typically refers to large positive integers, or more generally, large positive real numbers, but it may also be used in other contexts.

Very large numbers often occur in fields such as mathematics, cosmology, cryptography, and statistical mechanics. Sometimes people refer to numbers as being "astronomically large". However, it is easy to mathematically define numbers that are much larger even than those used in astronomy.

Scientific notation was created to handle the wide range of values that occur in scientific study. 1.0 × 109, for example, means one billion, a 1 followed by nine zeros: 1 000 000 000, and 1.0 × 10−9 means one billionth, or 0.000 000 001. Writing 109 instead of nine zeros saves readers the effort and hazard of counting a long series of zeros to see how large the number is.

Other large numbers, as regards length and time, are found in astronomy and cosmology. For example, the current Big Bang model suggests that the universe is 13.8 billion years (4.355 × 1017 seconds) old, and that the observable universe is 93 billion light years across (8.8 × 1026 metres), and contains about 5 × 1022 stars, organized into around 125 billion (1.25 × 1011) galaxies, according to Hubble Space Telescope observations. There are about 1080 atoms in the observable universe, by rough estimation.[5]

According to Don Page, physicist at the University of Alberta, Canada, the longest finite time that has so far been explicitly calculated by any physicist is

which corresponds to the scale of an estimated Poincaré recurrence time for the quantum state of a hypothetical box containing a black hole with the estimated mass of the entire universe, observable or not, assuming a certain inflationary model with an inflaton whose mass is 10−6Planck masses.[6][7] This time assumes a statistical model subject to Poincaré recurrence. A much simplified way of thinking about this time is in a model where the universe's history repeats itself arbitrarily many times due to properties of statistical mechanics; this is the time scale when it will first be somewhat similar (for a reasonable choice of "similar") to its current state again.

Combinatorial processes rapidly generate even larger numbers. The factorial function, which defines the number of permutations on a set of fixed objects, grows very rapidly with the number of objects. Stirling's formula gives a precise asymptotic expression for this rate of growth.

Combinatorial processes generate very large numbers in statistical mechanics. These numbers are so large that they are typically only referred to using their logarithms.

Gödel numbers, and similar numbers used to represent bit-strings in algorithmic information theory, are very large, even for mathematical statements of reasonable length. However, some pathological numbers are even larger than the Gödel numbers of typical mathematical propositions.

To help viewers of Cosmos distinguish between "millions" and "billions", astronomer Carl Sagan wrote a book and discoursed, stressing the "b". Sagan never did, however, say "billions and billions". The public's association of the phrase and Sagan came from a Tonight Show skit. Parodying Sagan's affect, Johnny Carson quipped "billions and billions".[8] The phrase has, however, now become a humorous fictitious number—the Sagan. Cf., Sagan Unit.

Between 1980 and 2000, personal computer hard disk sizes increased from about 10 megabytes (107 bytes) to over 100 gigabytes (1011 bytes).[9] A 100-gigabyte disk could store the favorite color of all of Earth's seven billion inhabitants without using data compression (storing 14 bytes times 7 billion inhabitants would equal 98 GB used). But what about a dictionary-on-disk storing all possible passwords containing up to 40 characters? Assuming each character equals one byte, there are about 2320 such passwords, which is about 2 × 1096. In his paper Computational capacity of the universe,[10]Seth Lloyd points out that if every particle in the universe could be used as part of a huge computer, it could store only about 1090 bits, less than one millionth of the size such a dictionary would require. However, storing information on hard disk and computing it are very different functions. On the one hand storage currently has limitations as stated, but computational speed is a different matter. It is quite conceivable[by whom?] that the stated limitations regarding storage have no bearing on the limitations of actual computational capacity,[citation needed] especially if the current research into quantum computers results in a "quantum leap" (but see holographic principle).

Still, computers can easily be programmed to start creating and displaying all possible 40-character passwords one at a time. Such a program could be left to run indefinitely. Assuming a modern PC could output 1 billion strings per second, it would take one billionth of 2 × 1096 seconds, or 2 × 1087 seconds to complete its task, which is about 6 × 1079 years. By contrast, the universe is estimated to be 13.8 billion (1.38 × 1010) years old. Computers will presumably continue to get faster, but the same paper mentioned before estimates that the entire universe functioning as a giant computer could have performed no more than 10120 operations since the Big Bang. This is trillions of times more computation than is required for displaying all 40-character passwords, but computing all 50 character passwords would outstrip the estimated computational potential of the entire universe.

Problems like this grow exponentially in the number of computations they require, and they are one reason why exponentially difficult problems are called "intractable" in computer science: for even small numbers like the 40 or 50 characters described earlier, the number of computations required exceeds even theoretical limits[citation needed] on mankind's computing power. The traditional division between "easy" and "hard" problems is thus drawn between programs that do and do not require exponentially increasing resources to execute.

Such limits are an advantage in cryptography, since any cipher-breaking technique that requires more than, say, the 10120 operations mentioned before will never be feasible. Such ciphers must be broken by finding efficient techniques unknown to the cipher's designer. Likewise, much of the research throughout all branches of computer science focuses on finding efficient solutions to problems that work with far fewer resources than are required by a naïve solution. For example, one way of finding the greatest common divisor between two 1000-digit numbers is to compute all their factors by trial division. This will take up to 2 × 10500 division operations, far too large to contemplate. But the Euclidean algorithm, using a much more efficient technique, takes only a fraction of a second to compute the GCD for even huge numbers such as these.

As a general rule, then, PCs in 2005 can perform 240 calculations in a few minutes.[citation needed] A few thousand PCs working for a few years could solve a problem requiring 264 calculations, but no amount of traditional computing power will solve a problem requiring 2128 operations (which is about what would be required to brute-force the encryption keys in 128-bit SSL commonly used in web browsers, assuming the underlying ciphers remain secure). Limits on computer storage are comparable.[quantify]Quantum computing might allow certain problems that require an exponential amount of calculations to become feasible. However, it has practical and theoretical challenges that may never be overcome, such as the mass production of qubits, the fundamental building block of quantum computing.

Given a strictly increasing integer sequence/function f0(n){\displaystyle f_{0}(n)} (n≥1) we can produce a faster-growing sequence f1(n)=f0n(n){\displaystyle f_{1}(n)=f_{0}^{n}(n)} (where the superscript n denotes the nthfunctional power). This can be repeated any number of times by letting fk(n)=fk−1n(n){\displaystyle f_{k}(n)=f_{k-1}^{n}(n)}, each sequence growing much faster than the one before it. Then we could define fω(n)=fn(n){\displaystyle f_{\omega }(n)=f_{n}(n)}, which grows much faster than any fk{\displaystyle f_{k}} for finite k (here ω is the first infinite ordinal number, representing the limit of all finite numbers k). This is the basis for the fast-growing hierarchy of functions, in which the indexing subscript is extended to ever-larger ordinals.

Steinhaus-Moser notation; apart from the method of construction of large numbers, this also involves a graphical notation with polygons. Alternative notations, like a more conventional function notation, can also be used with the same functions.

These notations are essentially functions of integer variables, which increase very rapidly with those integers. Ever-faster-increasing functions can easily be constructed recursively by applying these functions with large integers as argument.

A function with a vertical asymptote is not helpful in defining a very large number, although the function increases very rapidly: one has to define an argument very close to the asymptote, i.e. use a very small number, and constructing that is equivalent to constructing a very large number, e.g. the reciprocal.

A standardized way of writing very large numbers allows them to be easily sorted in increasing order, and one can get a good idea of how much larger a number is than another one.

To compare numbers in scientific notation, say 5×104 and 2×105, compare the exponents first, in this case 5 > 4, so 2×105 > 5×104. If the exponents are equal, the mantissa (or coefficient) should be compared, thus 5×104 > 2×104 because 5 > 2.

Tetration with base 10 gives the sequence 10↑↑n=10→n→2=(10↑)n1{\displaystyle 10\uparrow \uparrow n=10\to n\to 2=(10\uparrow )^{n}1}, the power towers of numbers 10, where (10↑)n{\displaystyle (10\uparrow )^{n}} denotes a functional power of the function f(n)=10n{\displaystyle f(n)=10^{n}} (the function also expressed by the suffix "-plex" as in googolplex, see the Googol family).

These are very round numbers, each representing an order of magnitude in a generalized sense. A crude way of specifying how large a number is, is specifying between which two numbers in this sequence it is.

More accurately, numbers in between can be expressed in the form (10↑)na{\displaystyle (10\uparrow )^{n}a}, i.e., with a power tower of 10s and a number at the top, possibly in scientific notation, e.g. 10101010104.829{\displaystyle 10^{10^{10^{10^{10^{4.829}}}}}}, a number between 10↑↑5{\displaystyle 10\uparrow \uparrow 5} and 10↑↑6{\displaystyle 10\uparrow \uparrow 6} (note that 10↑↑n<(10↑)na<10↑↑(n+1){\displaystyle 10\uparrow \uparrow n<(10\uparrow )^{n}a<10\uparrow \uparrow (n+1)} if 1<a<10{\displaystyle 1<a<10}). (See also extension of tetration to real heights.)

Thus the "order of magnitude" of a number (on a larger scale than usually meant), can be characterized by the number of times (n) one has to take the log10{\displaystyle log_{10}} to get a number between 1 and 10. Thus, the number is between 10↑↑n{\displaystyle 10\uparrow \uparrow n} and 10↑↑(n+1){\displaystyle 10\uparrow \uparrow (n+1)}. As explained, a more accurate description of a number also specifies the value of this number between 1 and 10, or the previous number (taking the logarithm one time less) between 10 and 1010, or the next, between 0 and 1.

I.e., if a number x is too large for a representation (10↑)nx{\displaystyle (10\uparrow )^{n}x} we can make the power tower one higher, replacing x by log10x, or find x from the lower-tower representation of the log10 of the whole number. If the power tower would contain one or more numbers different from 10, the two approaches would lead to different results, corresponding to the fact that extending the power tower with a 10 at the bottom is then not the same as extending it with a 10 at the top (but, of course, similar remarks apply if the whole power tower consists of copies of the same number, different from 10).

If the height of the tower is large, the various representations for large numbers can be applied to the height itself. If the height is given only approximately, giving a value at the top does not make sense, so we can use the double-arrow notation, e.g. 10↑↑(7.21×108){\displaystyle 10\uparrow \uparrow (7.21\times 10^{8})}. If the value after the double arrow is a very large number itself, the above can recursively be applied to that value.

Similarly to the above, if the exponent of (10↑){\displaystyle (10\uparrow )} is not exactly given then giving a value at the right does not make sense, and we can, instead of using the power notation of (10↑){\displaystyle (10\uparrow )}, add 1 to the exponent of (10↑↑){\displaystyle (10\uparrow \uparrow )}, so we get e.g. (10↑↑)3(2.8×1012){\displaystyle (10\uparrow \uparrow )^{3}(2.8\times 10^{12})}.

If the exponent of (10↑↑){\displaystyle (10\uparrow \uparrow )} is large, the various representations for large numbers can be applied to this exponent itself. If this exponent is not exactly given then, again, giving a value at the right does not make sense, and we can, instead of using the power notation of (10↑↑){\displaystyle (10\uparrow \uparrow )}, use the triple arrow operator, e.g. 10↑↑↑(7.3×106){\displaystyle 10\uparrow \uparrow \uparrow (7.3\times 10^{6})}.

If the right-hand argument of the triple arrow operator is large the above applies to it, so we have e.g. 10↑↑↑(10↑↑)2(10↑)497(9.73×1032){\displaystyle 10\uparrow \uparrow \uparrow (10\uparrow \uparrow )^{2}(10\uparrow )^{497}(9.73\times 10^{32})} (between 10↑↑↑10↑↑↑4{\displaystyle 10\uparrow \uparrow \uparrow 10\uparrow \uparrow \uparrow 4} and 10↑↑↑10↑↑↑5{\displaystyle 10\uparrow \uparrow \uparrow 10\uparrow \uparrow \uparrow 5}). This can be done recursively, so we can have a power of the triple arrow operator.

We can proceed with operators with higher numbers of arrows, written ↑n{\displaystyle \uparrow ^{n}}.

An advantage of the first is that when considered as function of b, there is a natural notation for powers of this function (just like when writing out the n arrows): (a↑n)kb{\displaystyle (a\uparrow ^{n})^{k}b}. For example:

Since the b can also be very large, in general we write a number with a sequence of powers (10↑n)kn{\displaystyle (10\uparrow ^{n})^{k_{n}}} with decreasing values of n (with exactly given integer exponents kn{\displaystyle {k_{n}}}) with at the end a number in ordinary scientific notation. Whenever a kn{\displaystyle {k_{n}}} is too large to be given exactly, the value of kn+1{\displaystyle {k_{n+1}}} is increased by 1 and everything to the right of (n+1)kn+1{\displaystyle ({n+1})^{k_{n+1}}} is rewritten.

For describing numbers approximately, deviations from the decreasing order of values of n are not needed. For example, 10↑(10↑↑)5a=(10↑↑)6a{\displaystyle 10\uparrow (10\uparrow \uparrow )^{5}a=(10\uparrow \uparrow )^{6}a}, and 10↑(10↑↑↑3)=10↑↑(10↑↑10+1)≈10↑↑↑3{\displaystyle 10\uparrow (10\uparrow \uparrow \uparrow 3)=10\uparrow \uparrow (10\uparrow \uparrow 10+1)\approx 10\uparrow \uparrow \uparrow 3}. Thus we have the somewhat counterintuitive result that a number x can be so large that, in a way, x and 10x are "almost equal" (for arithmetic of large numbers see also below).

If the superscript of the upward arrow is large, the various representations for large numbers can be applied to this superscript itself. If this superscript is not exactly given then there is no point in raising the operator to a particular power or to adjust the value on which it acts. We can simply use a standard value at the right, say 10, and the expression reduces to 10↑n10=(10→10→n){\displaystyle 10\uparrow ^{n}10=(10\to 10\to n)} with an approximate n. For such numbers the advantage of using the upward arrow notation no longer applies, and we can also use the chain notation.

The above can be applied recursively for this n, so we get the notation ↑n{\displaystyle \uparrow ^{n}} in the superscript of the first arrow, etc., or we have a nested chain notation, e.g.:

If the number of levels gets too large to be convenient, a notation is used where this number of levels is written down as a number (like using the superscript of the arrow instead of writing many arrows). Introducing a function f(n)=10↑n10{\displaystyle f(n)=10\uparrow ^{n}10} = (10 → 10 → n), these levels become functional powers of f, allowing us to write a number in the form fm(n){\displaystyle f^{m}(n)} where m is given exactly and n is an integer which may or may not be given exactly (for the example: f2(3×105){\displaystyle f^{2}(3\times 10^{5})}. If n is large we can use any of the above for expressing it. The "roundest" of these numbers are those of the form fm(1) = (10→10→m→2). For example, (10→10→3→2)=10↑10↑10101010{\displaystyle (10\to 10\to 3\to 2)=10\uparrow ^{10\uparrow ^{10^{10}}10}10}

Compare the definition of Graham's number: it uses numbers 3 instead of 10 and has 64 arrow levels and the number 4 at the top; thus G<3→3→65→2<(10→10→65→2)=f65(1){\displaystyle G<3\rightarrow 3\rightarrow 65\rightarrow 2<(10\to 10\to 65\to 2)=f^{65}(1)}, but also G<f64(4)<f65(1){\displaystyle G<f^{64}(4)<f^{65}(1)}.

If m in fm(n){\displaystyle f^{m}(n)} is too large to give exactly we can use a fixed n, e.g. n = 1, and apply the above recursively to m, i.e., the number of levels of upward arrows is itself represented in the superscripted upward-arrow notation, etc. Using the functional power notation of f this gives multiple levels of f. Introducing a function g(n)=fn(1){\displaystyle g(n)=f^{n}(1)} these levels become functional powers of g, allowing us to write a number in the form gm(n){\displaystyle g^{m}(n)} where m is given exactly and n is an integer which may or may not be given exactly. We have (10→10→m→3) = gm(1). If n is large we can use any of the above for expressing it. Similarly we can introduce a function h, etc. If we need many such functions we can better number them instead of using a new letter every time, e.g. as a subscript, so we get numbers of the form fkm(n){\displaystyle f_{k}^{m}(n)} where k and m are given exactly and n is an integer which may or may not be given exactly. Using k=1 for the f above, k=2 for g, etc., we have (10→10→n→k) = fk(n)=fk−1n(1){\displaystyle f_{k}(n)=f_{k-1}^{n}(1)}. If n is large we can use any of the above for expressing it. Thus we get a nesting of forms fkmk{\displaystyle {f_{k}}^{m_{k}}} where going inward the k decreases, and with as inner argument a sequence of powers (10↑n)pn{\displaystyle (10\uparrow ^{n})^{p_{n}}} with decreasing values of n (where all these numbers are exactly given integers) with at the end a number in ordinary scientific notation.

When k is too large to be given exactly, the number concerned can be expressed as fn(10){\displaystyle {f_{n}}(10)}=(10→10→10→n) with an approximate n. Note that the process of going from the sequence 10n{\displaystyle 10^{n}}=(10→n) to the sequence 10↑n10{\displaystyle 10\uparrow ^{n}10}=(10→10→n) is very similar to going from the latter to the sequence fn(10){\displaystyle {f_{n}}(10)}=(10→10→10→n): it is the general process of adding an element 10 to the chain in the chain notation; this process can be repeated again (see also the previous section). Numbering the subsequent versions of this function a number can be described using functions fqkmqk{\displaystyle {f_{qk}}^{m_{qk}}}, nested in lexicographical order with q the most significant number, but with decreasing order for q and for k; as inner argument we have a sequence of powers (10↑n)pn{\displaystyle (10\uparrow ^{n})^{p_{n}}} with decreasing values of n (where all these numbers are exactly given integers) with at the end a number in ordinary scientific notation.

For a number too large to write down in the Conway chained arrow notation we can describe how large it is by the length of that chain, for example only using elements 10 in the chain; in other words, we specify its position in the sequence 10, 10→10, 10→10→10, .. If even the position in the sequence is a large number we can apply the same techniques again for that.

M77,232,917≈4.67×1023,249,424≈10107.37=(10↑)27.37{\displaystyle M_{77,232,917}\approx 4.67\times 10^{23,249,424}\approx 10^{10^{7.37}}=(10\uparrow )^{2}\ 7.37}, the 50th and as of January 2018[update] the largest known Mersenne prime.

Note that for a number 10n{\displaystyle 10^{n}}, one unit change in n changes the result by a factor 10. In a number like 106.2×103{\displaystyle 10^{\,\!6.2\times 10^{3}}}, with the 6.2 the result of proper rounding using significant figures, the true value of the exponent may be 50 less or 50 more. Hence the result may be a factor 1050{\displaystyle 10^{50}} too large or too small. This seems like extremely poor accuracy, but for such a large number it may be considered fair (a large error in a large number may be "relatively small" and therefore acceptable).

In the case of an approximation of an extremely large number, the relative error may be large, yet there may still be a sense in which we want to consider the numbers as "close in magnitude". For example, consider

to be "close in magnitude". The relative error between these two numbers is large, and the relative error between their logarithms is still large; however, the relative error in their second-iterated logarithms is small:

A very large number raised to a very large power is "approximately" equal to the larger of the following two values: the first value and 10 to the power the second. For example, for very large n we have nn≈10n{\displaystyle n^{n}\approx 10^{n}} (see e.g. the computation of mega) and also 2n≈10n{\displaystyle 2^{n}\approx 10^{n}}. Thus 2↑↑65536≈10↑↑65533{\displaystyle 2\uparrow \uparrow 65536\approx 10\uparrow \uparrow 65533}, see table.

The busy beaver function Σ is an example of a function which grows faster than any computable function. Its value for even relatively small input is huge. The values of Σ(n) for n = 1, 2, 3, 4 are 1, 4, 6, 13 (sequence A028444 in the OEIS). Σ(5) is not known but is definitely ≥ 4098. Σ(6) is at least 3.5×1018267.

^Regarding the comparison with the previous value: 10↑n10<3↑n+13{\displaystyle 10\uparrow ^{n}10<3\uparrow ^{n+1}3}, so starting the 64 steps with 1 instead of 4 more than compensates for replacing the numbers 3 by 10