[sdiy] large numbers
Andre Majorel
aym-htnys at teaser.fr
Fri Jul 13 22:02:25 CEST 2018
On 2018-07-13 09:42 -0700, Tim Ressel wrote:
> I need to generate a lookup table with 64 bit values. Usually
> I use Excel but there is a problem: It only does 14 decimal
> places. I don't think this is enough. Any suggestions?
What sort of 64-bit values ? Signed integers, unsigned integers,
IEEE 754 double precision, something else ?
To express a 64-bit integer in decimal, you need 20 digits (64 *
log 2 / log 10 = 19.266...)
In C/C++, type "long double" is usually capable of accurately
representing 64-bit integers (as long as you use another
compiler than MSVC, apparently). See
https://en.wikipedia.org/wiki/Long_double
In Perl, you can get as many digits as you like by using
Math::BigFloat or Math::BigInt. Perl is pretty good at
converting between characters, floating point and binary of
either endianness, thanks to pack() and unpack(). This program
writes 160 bytes to stdout, representing 1! through 20! as
64-bit big-endian unsigned integers :
use Math::BigFloat;
for (my $n = 1; $n <= 20; $n++)
{
my $f = Math::BigFloat->new($n);
$f->bfac();
print pack('Q>', $f->as_int());
}
Hex-and-ASCII dump of the output :
0000_0000 00 00 00 00 00 00 00 01 ........
0000_0008 00 00 00 00 00 00 00 02 ........
0000_0010 00 00 00 00 00 00 00 06 ........
0000_0018 00 00 00 00 00 00 00 18 ........
0000_0020 00 00 00 00 00 00 00 78 .......x
0000_0028 00 00 00 00 00 00 02 D0 .......Ð
0000_0030 00 00 00 00 00 00 13 B0 .......°
0000_0038 00 00 00 00 00 00 9D 80 ........
0000_0040 00 00 00 00 00 05 89 80 ........
0000_0048 00 00 00 00 00 37 5F 00 .....7_.
0000_0050 00 00 00 00 02 61 15 00 .....a..
0000_0058 00 00 00 00 1C 8C FC 00 ......ü.
0000_0060 00 00 00 01 73 28 CC 00 ....s(Ì.
0000_0068 00 00 00 14 4C 3B 28 00 ....L;(.
0000_0070 00 00 01 30 77 77 58 00 ...0wwX.
0000_0078 00 00 13 07 77 75 80 00 ....wu..
0000_0080 00 01 43 7E EE CD 80 00 ..C~îÍ..
0000_0088 00 16 BE EC CA 73 00 00 ..¾ìÊs..
0000_0090 01 B0 2B 93 06 89 00 00 .°+.....
0000_0098 21 C3 67 7C 82 B4 00 00 !Ãg|.´..
--
André Majorel http://www.teaser.fr/~amajorel/
More information about the Synth-diy
mailing list