implement sqrt
This commit is contained in:
parent
12fe55e61f
commit
a22f9877fe
17
fix16.tal
17
fix16.tal
|
@ -258,6 +258,23 @@
|
|||
&odd #0080
|
||||
&rest ADD2 DUP EOR JMP2r
|
||||
|
||||
@x16-sqrt ( x* -> sqrt(x)* )
|
||||
LIT2r ff00
|
||||
LIT2r 0200 ( [c* 2*] )
|
||||
DUP2 STH2kr x16-div ( x* s=x/2* [c* 2*] )
|
||||
&loop ( x* s0* [c* 2*] )
|
||||
OVR2 OVR2 x16-div ( x* s0* x/s0* [c* 2*] )
|
||||
OVR2 x16-add ( x* s0* (x/s0)+s0* [c* 2*] )
|
||||
STH2kr x16-div ( x* s0* s1=((x/s0)+s0)/2* [c* 2*] )
|
||||
SWP2 OVR2 x16-ne ( x* s1* go^ [c* 2*] )
|
||||
SWP2r INC2r ORAkr STHr ( x* s1* go^ ok^ [2* c+1*] )
|
||||
SWP2r ?&continue ( x* s1* go^ [c+1* 2*] )
|
||||
POP !&done ( x* s1* [c+1* 2*] )
|
||||
&continue ( x* s1* go^ [c+1* 2*] )
|
||||
?&loop ( x* s1* [c+1* 2*] )
|
||||
&done ( x* s1* [c* 2*] )
|
||||
POP2r POP2r NIP2 JMP2r ( s1* )
|
||||
|
||||
@x16-cos ( x* -> cos(x)* )
|
||||
x16-pi/2 ADD2 ,x16-sin JMP
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
from math import ceil, copysign, cos, floor, log, sin, tan
|
||||
from math import ceil, copysign, cos, floor, log, sin, sqrt, tan
|
||||
from os import environ
|
||||
from random import randint
|
||||
from subprocess import Popen, PIPE, run
|
||||
|
@ -113,6 +113,8 @@ def x16_lteq(x, y):
|
|||
return int(tosigned(x) <= tosigned(y))
|
||||
def x16_gteq(x, y):
|
||||
return int(tosigned(x) >= tosigned(y))
|
||||
def x16_sqrt(x):
|
||||
return int(sqrt(x / 256) * 256)
|
||||
def x16_sin(x):
|
||||
z = round(sin(x / 256) * 256)
|
||||
return z if z >= 0 else 65536 + z
|
||||
|
@ -162,6 +164,7 @@ def main():
|
|||
test(p, trials, b'>', [('x', u16), ('y', u16)], u8, x16_gt)
|
||||
test(p, trials, b'{', [('x', u16), ('y', u16)], u8, x16_lteq)
|
||||
test(p, trials, b'}', [('x', u16), ('y', u16)], u8, x16_gteq)
|
||||
test(p, trials, b'r', [('x', p16)], u16, x16_sqrt, eq=releq)
|
||||
test(p, trials, b's', [('x', p16)], u16, x16_sin, eq=abseq)
|
||||
test(p, trials, b'c', [('x', p16)], u16, x16_cos, eq=abseq)
|
||||
test(p, trials, b't', [('x', t16)], u16, x16_tan, eq=taneq)
|
||||
|
|
|
@ -64,6 +64,7 @@
|
|||
;buf LDA LIT "> EQU ;test-x16-gt JCN2
|
||||
;buf LDA LIT "{ EQU ;test-x16-lteq JCN2
|
||||
;buf LDA LIT "} EQU ;test-x16-gteq JCN2
|
||||
;buf LDA LIT "r EQU ;test-x16-sqrt JCN2
|
||||
;buf LDA LIT "s EQU ;test-x16-sin JCN2
|
||||
;buf LDA LIT "c EQU ;test-x16-cos JCN2
|
||||
;buf LDA LIT "t EQU ;test-x16-tan JCN2
|
||||
|
@ -113,6 +114,7 @@
|
|||
@test-x16-lteq #04 #01 ;x16-lteq ;test JMP2
|
||||
@test-x16-gt #04 #01 ;x16-gt ;test JMP2
|
||||
@test-x16-gteq #04 #01 ;x16-gteq ;test JMP2
|
||||
@test-x16-sqrt #02 #02 ;x16-sqrt ;test JMP2
|
||||
@test-x16-sin #02 #02 ;x16-sin ;test JMP2
|
||||
@test-x16-cos #02 #02 ;x16-cos ;test JMP2
|
||||
@test-x16-tan #02 #02 ;x16-tan ;test JMP2
|
||||
|
|
Loading…
Reference in New Issue