mirror of https://github.com/svaarala/duktape.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
2.4 KiB
49 lines
2.4 KiB
#!/usr/bin/env python2
|
|
#
|
|
# Double constants, see http://en.wikipedia.org/wiki/Double-precision_floating-point_format.
|
|
# YAML builtins metadata expressed the constants in binary form (8 bytes of
|
|
# IEEE double data) to ensure bit exactness.
|
|
#
|
|
|
|
import struct
|
|
import mpmath
|
|
|
|
def create_double_constants_mpmath():
|
|
# Just a helper to use manually
|
|
# http://mpmath.googlecode.com/svn/trunk/doc/build/basics.html
|
|
|
|
mpmath.mp.prec = 1000 # 1000 bits
|
|
|
|
def printhex(name, x):
|
|
# to hex string, ready for create_double()
|
|
hex = struct.pack('>d', float(str(x))).encode('hex')
|
|
flt = struct.unpack('>d', hex.decode('hex'))[0]
|
|
print '%-11s -> %s (= %.20f)' % (name, hex, flt)
|
|
|
|
printhex('DBL_E', mpmath.mpf(mpmath.e))
|
|
printhex('DBL_LN10', mpmath.log(10))
|
|
printhex('DBL_LN2', mpmath.log(2))
|
|
printhex('DBL_LOG2E', mpmath.log(mpmath.e) / mpmath.log(2))
|
|
printhex('DBL_LOG10E', mpmath.log(mpmath.e) / mpmath.log(10))
|
|
printhex('DBL_PI', mpmath.mpf(mpmath.pi))
|
|
printhex('DBL_SQRT1_2', mpmath.mpf(1) / mpmath.sqrt(2))
|
|
printhex('DBL_SQRT2', mpmath.sqrt(2))
|
|
|
|
create_double_constants_mpmath()
|
|
|
|
def create_double(x):
|
|
return struct.unpack('>d', x.decode('hex'))[0]
|
|
|
|
DBL_NAN = create_double('7ff8000000000000') # a NaN matching our "normalized NAN" definition (see duk_tval.h)
|
|
DBL_POSITIVE_INFINITY = create_double('7ff0000000000000') # positive infinity (unique)
|
|
DBL_NEGATIVE_INFINITY = create_double('fff0000000000000') # negative infinity (unique)
|
|
DBL_MAX_DOUBLE = create_double('7fefffffffffffff') # 'Max Double'
|
|
DBL_MIN_DOUBLE = create_double('0000000000000001') # 'Min subnormal positive double'
|
|
DBL_E = create_double('4005bf0a8b145769') # (= 2.71828182845904509080)
|
|
DBL_LN10 = create_double('40026bb1bbb55516') # (= 2.30258509299404590109)
|
|
DBL_LN2 = create_double('3fe62e42fefa39ef') # (= 0.69314718055994528623)
|
|
DBL_LOG2E = create_double('3ff71547652b82fe') # (= 1.44269504088896338700)
|
|
DBL_LOG10E = create_double('3fdbcb7b1526e50e') # (= 0.43429448190325181667)
|
|
DBL_PI = create_double('400921fb54442d18') # (= 3.14159265358979311600)
|
|
DBL_SQRT1_2 = create_double('3fe6a09e667f3bcd') # (= 0.70710678118654757274)
|
|
DBL_SQRT2 = create_double('3ff6a09e667f3bcd') # (= 1.41421356237309514547)
|
|
|