[Flashforth-devel] FF50 (dspic33) Floating Point Beta working
Brought to you by:
oh2aun
|
From: pito <pi...@vo...> - 2014-07-13 12:26:39
|
This is with the Beta modified Leon's FP for FF50 (dspic33). Seems to be _much_ faster than on amforth.
Still som issues to fix. Input is done via double or single integer with conversions to float (see below).
Precision set to 6 digits (fp single precision only).
Will continue when Mike is back from holidays.. :)
marker _tstflt_ ok<#,ram>
ok<#,ram>
314159265. d>f 100000000. d>f f/ fconstant _pi ok<#,ram>
ok<#,ram>
cr _pi fdup fdup f. fs. fe.
3.14159 3.14159E0 3.14159E0 ok<#,ram>
ok<#,ram>
-314159265. d>f 100000000. d>f f/ fconstant _-pi ok<#,ram>
ok<#,ram>
cr _-pi fdup fdup f. fs. fe.
-3.14159 -3.14159E0 -3.14159E0 ok<#,ram>
ok<#,ram>
1000000. d>f fconstant _1e6 ok<#,ram>
ok<#,ram>
cr _1e6 fdup fdup f. fs. fe.
1000000. 1.00000E6 1.00000E6 ok<#,ram>
ok<#,ram>
100 s>f fconstant _100 ok<#,ram>
ok<#,ram>
cr _100 fdup fdup f. fs. fe.
100.000 1.00000E2 100.000E0 ok<#,ram>
ok<#,ram>
\ : prntpi _1e6 _100 f* f* f>d d. ; ok<#,ram>
ok<#,ram>
\ +pi f* f/ ok<#,ram>
ok<#,ram>
: test1
_1e6 fdup fdup fdup fdup
f* f* f* f*
_pi
fswap
f/
_1e6 fdup fdup fdup fdup
f* f* f* f* f*
fdup fdup f. fs. fe. ( the result shall be 3.14159265 )
; ok<#,ram>
ok<#,ram>
: test2
_pi _1e6 f/ _1e6 f/ _1e6 f/ _1e6 f/ _1e6 f/
_1e6 fdup fdup fdup fdup
f* f* f* f* f*
fdup fdup f. fs. fe. ( the result shall be 3.14159265 )
; ok<#,ram>
ok<#,ram>
\ -pi f* f/ ok<#,ram>
ok<#,ram>
: test3
_1e6 fdup fdup fdup fdup
f* f* f* f*
_-pi
fswap
f/
_1e6 fdup fdup fdup fdup
f* f* f* f* f*
fdup fdup f. fs. fe. ( the result shall be -3.14159265 )
; ok<#,ram>
ok<#,ram>
: test4
_-pi _1e6 f/ _1e6 f/ _1e6 f/ _1e6 f/ _1e6 f/
_1e6 fdup fdup fdup fdup
f* f* f* f* f*
fdup fdup f. fs. fe. ( the result shall be -3.14159265 )
; ok<#,ram>
ok<#,ram>
test1 3.14159 3.14159E0 3.14159E0 ok<#,ram>
test2 3.14159 3.14159E0 3.14159E0 ok<#,ram>
test3 -3.14159 -3.14159E0 -3.14159E0 ok<#,ram>
test4 -3.14159 -3.14159E0 -3.14159E0 ok<#,ram>
ok<#,ram>
ok<#,ram>
1000000. d>f 7 s>f f/ fdup fdup f. fs. fe. 142857. 1.42857E5 142.857E3 ok<#,ram>
-1000000. d>f 7 s>f f/ fdup fdup f. fs. fe. -142857. -1.42857E5 -142.857E3 ok<#,ram>
300000. d>f 555555. d>f f+ fdup fdup f. fs. fe. 855555. 8.55555E5 855.555E3 ok<#,ram>
-300000. d>f 555555. d>f f+ fdup fdup f. fs. fe. 255555. 2.55555E5 255.555E3 ok<#,ram>
-300000. d>f -555555. d>f f+ fdup fdup f. fs. fe. -855555. -8.55555E5 -855.555E3 ok<#,ram>
-300000. d>f -555555. d>f f- fdup fdup f. fs. fe. 255555. 2.55555E5 255.555E3 ok<#,ram>
\ Earth's volume and mass
\ E. radius in m (Wiki: equatorial radius)
6378100. d>f fconstant earthradius ok<#,ram>
\ E. volume in m3 (Wiki: 1.08321×10^12 km3)
earthradius fdup fdup f* f* _pi f* 4 s>f f* 3 s>f f/ earthvolume f! earthvolume f@ fdup fdup cr f. fs. fe.
1086830000000000000000. 1.08683E21 1.08683E21 ok<#,ram>
\ E. density 5.515 g/cm3 (Wiki)
5515 s>f 1000 s>f f/ 100 s>f fdup fdup f* f* f* earthvolume f@ f* ok<#,ram> 61481 28058
\ E. mass in g
fdup fs. 5.99388E27 ok<#,ram> 61481 28058
\ E. mass in kg
1000 s>f f/ ok<#,ram> 43033 26782
fs. 5.99388E24 ok<#,ram>
\ Earth mass in kg, Wiki: 5.97219×10^24 kg
5.99388E24
|