Nice! Your dtoa passed my quick pseudorandom number test.
import ./src/dtoa
import math, parseutils, random
proc test0(v: float64) =
let s = dtoa(v)
var v2:float64
doAssert parseBiggestFloat(s, v2) != 0
doAssert v2 == v
proc test(v: float64) =
test0(v)
test0(-v)
test0(1.0/v)
test0(-1.0/v)
proc testrand(v: float64) =
test(v)
for i in 0..<1000:
let r = rand(2.0) - 1.0
test(v*r)
randomize()
var x:float64 = 1.0
for i in 0..<1023:
x *= 2.0
testrand(x)
x = 1.0
for i in 0..<1022:
x *= 0.5
testrand(x)
for i in 0..<1000000:
let e = rand(1022.0*2.0) - 1022
test(pow(2.0, e))
Run
- A fast float to string conversion library lemonboy
- Re: A fast float to string conversion library Araq
- Re: A fast float to string conversion library miran
- Re: A fast float to string conversion library cdome
- Re: A fast float to string conversion librar... miran
- Re: A fast float to string conversion l... alehander42
- Re: A fast float to string conversi... Trustable
- Re: A fast float to string conv... demotomohiro
- Re: A fast float to string conv... lemonboy
