better float idea
This commit is contained in:
parent
cbe3580001
commit
0d0455ce92
2 changed files with 18 additions and 14 deletions
|
@ -68,7 +68,7 @@ function compile_warning
|
|||
; ulong significand
|
||||
; ulong exponent
|
||||
; where for i = -1023..1023, powers_of_10 + 16*i points to an entry where
|
||||
; (significand / 2^58) * 2^exponent
|
||||
; 10^i = significand * 2^exponent
|
||||
global powers_of_10
|
||||
|
||||
#include util.b
|
||||
|
@ -183,7 +183,7 @@ function fill_in_powers_of_10
|
|||
powers_of_10 = malloc(40000)
|
||||
powers_of_10 += 20000
|
||||
significand = 1 < 57
|
||||
exponent = 1
|
||||
exponent = -57
|
||||
i = 0
|
||||
:pow10_loop_positive
|
||||
p = powers_of_10
|
||||
|
@ -198,7 +198,7 @@ function fill_in_powers_of_10
|
|||
i += 1
|
||||
if i < 1024 goto pow10_loop_positive
|
||||
significand = 1 < 57
|
||||
exponent = 1
|
||||
exponent = -57
|
||||
i = 0
|
||||
:pow10_loop_negative
|
||||
p = powers_of_10
|
||||
|
@ -233,7 +233,6 @@ function print_powers_of_10
|
|||
p = powers_of_10
|
||||
p += i < 4
|
||||
significand = *8p
|
||||
putc('.)
|
||||
j = 57
|
||||
:pow10_binary_loop
|
||||
b = significand > j
|
||||
|
|
|
@ -283,12 +283,21 @@ function tokenize
|
|||
; first, deal with the fractional part
|
||||
p = powers_of_10
|
||||
p += pow10 < 4
|
||||
full_multiply_signed(fraction, *8p, &upper, &lower)
|
||||
; effectively we want the upper 58 bits of this multiplication
|
||||
significand = lower > 58
|
||||
significand |= upper < 6
|
||||
full_multiply_signed(fraction, *8p, &lower, &upper)
|
||||
if upper == 0 goto fmultiply_no_upper
|
||||
n = leftmost_1bit(upper)
|
||||
n += 1
|
||||
significand = lower > n
|
||||
exponent += n
|
||||
n = 64 - n
|
||||
significand |= upper < n
|
||||
goto fmultiply_cont
|
||||
:fmultiply_no_upper
|
||||
significand = lower
|
||||
goto fmultiply_cont
|
||||
:fmultiply_cont
|
||||
p += 8
|
||||
exponent = *8p
|
||||
exponent += *8p
|
||||
|
||||
putn(significand)
|
||||
putc(32)
|
||||
|
@ -300,8 +309,7 @@ function tokenize
|
|||
n += 1
|
||||
significand = right_shift(significand, n)
|
||||
exponent += n
|
||||
n = 58 - exponent
|
||||
significand += left_shift(integer, n)
|
||||
significand += right_shift(integer, exponent)
|
||||
putn(significand)
|
||||
putc(32)
|
||||
putn_signed(exponent)
|
||||
|
@ -320,9 +328,6 @@ function tokenize
|
|||
significand &= ~b
|
||||
data = significand
|
||||
exponent += 1023 ; float format
|
||||
putc('*)
|
||||
putn(exponent)
|
||||
putc(10)
|
||||
|
||||
data |= exponent < 52
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue