made parseBiggestFloat faster for large exponents
This commit is contained in:
parent
30f8568570
commit
6c8e740b57
1 changed files with 12 additions and 3 deletions
|
|
@ -215,6 +215,17 @@ proc parseInt*(s: string, number: var int, start = 0): int {.
|
||||||
else:
|
else:
|
||||||
number = int(res)
|
number = int(res)
|
||||||
|
|
||||||
|
proc tenToThePowerOf(b: int): biggestFloat =
|
||||||
|
var b = b
|
||||||
|
var a = 10.0
|
||||||
|
result = 1.0
|
||||||
|
while true:
|
||||||
|
if (b and 1) == 1:
|
||||||
|
result *= a
|
||||||
|
b = b shr 1
|
||||||
|
if b == 0: break
|
||||||
|
a *= a
|
||||||
|
|
||||||
proc parseBiggestFloat*(s: string, number: var biggestFloat, start = 0): int {.
|
proc parseBiggestFloat*(s: string, number: var biggestFloat, start = 0): int {.
|
||||||
rtl, extern: "npuParseBiggestFloat", noSideEffect.} =
|
rtl, extern: "npuParseBiggestFloat", noSideEffect.} =
|
||||||
## parses a float starting at `start` and stores the value into `number`.
|
## parses a float starting at `start` and stores the value into `number`.
|
||||||
|
|
@ -280,9 +291,7 @@ proc parseBiggestFloat*(s: string, number: var biggestFloat, start = 0): int {.
|
||||||
inc(i)
|
inc(i)
|
||||||
while s[i] == '_': inc(i)
|
while s[i] == '_': inc(i)
|
||||||
# Calculate Exponent
|
# Calculate Exponent
|
||||||
var hd = 1.0
|
let hd = tenToThePowerOf(exponent)
|
||||||
# XXX: this loop is horrible for large exponents:
|
|
||||||
for j in 1..exponent: hd = hd * 10.0
|
|
||||||
if esign > 0.0: number = number * hd
|
if esign > 0.0: number = number * hd
|
||||||
else: number = number / hd
|
else: number = number / hd
|
||||||
# evaluate sign
|
# evaluate sign
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue