Bigger than Google: formatting very big numbers in Grids/Browse

An Exabyte is 10^18 bytes. (Exa, Peta, Tera, Giga, Mega) A Googlebyte is 10^100 bytes (1 followed by 100 zeroes). My 8 year old daughter knows that a GoolePlex is a 1 followed by a google zeroes.

The code below generates very big numbers by generating powers of 2 and displays them in both a BROWSE and a grid.

For example 2^ 100, or about 10^30 is shown as

      1,267,650,600,228,230,000,000,000,000,000

The :P option of the BROWSE FIELDS clause works as the InputMask to put in the comma separators Using such a mask on large numbers makes them easier to read, but scientific notation is much better for very large numbers.

Observe that each number ends in either a 2,4 6 or 8, and cannot end in 0 because a power of 2 is not divisible by 5 (or 10). After about 10^16 the numbers do end in 0, indicating that the numeric precision is just under 16 decimal digits (a topic for another blog)

CREATE CURSOR temp (name c(10),pow10 c(10),value b)

FOR i = 1 TO 350

      INSERT INTO temp VALUES ("2^"+TRANSFORM(i),"10^"+TRANSFORM(LOG10(2^i)),2^i)

ENDFOR

BROWSE FIELDS name,pow10,value:p="999,999,999,999,999,999,999,999,999,999,999,999" NOWAIT

PUBLIC x as form

SKIP -10 && go back 10 records

x=CREATEOBJECT("form")

x.visible=1

x.addobject("gr","grid")

x.gr.visible=1

x.gr.width=x.width

x.gr.column3.InputMask="999,999,999,999,999,999,999,999,999,999,999,999"

 

 

 

73905