From e0e1430afca8e7818e603ac8630737ef6a348d3d Mon Sep 17 00:00:00 2001 From: moshix Date: Wed, 2 Feb 2022 12:03:58 -0600 Subject: [PATCH] z/VM REXX quadratic solver --- quadratics.exec | 64 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 quadratics.exec diff --git a/quadratics.exec b/quadratics.exec new file mode 100644 index 0000000..e3f198f --- /dev/null +++ b/quadratics.exec @@ -0,0 +1,64 @@ +/* REXX */ + Numeric Digits 30 + Parse Arg a b c 1 alist + Select + When a='' | a='?' Then + Call exit 'rexx qgl a b c solves a*x**2+b*x+c' + When words(alist)<>3 Then + Call exit 'three numbers are required' + Otherwise + Nop + End + gl=a'*x**2' + Select + When b<0 Then gl=gl||b'*x' + When b>0 Then gl=gl||'+'||b'*x' + Otherwise Nop + End + Select + When c<0 Then gl=gl||c + When c>0 Then gl=gl||'+'||c + Otherwise Nop + End + Say gl '= 0' + + d=b**2-4*a*c + If d<0 Then Do + dd=sqrt(-d) + r=-b/(2*a) + i=dd/(2*a) + x1=r'+'i'i' + x2=r'-'i'i' + End + Else Do + dd=sqrt(d) + x1=(-b+dd)/(2*a) + x2=(-b-dd)/(2*a) + End + Say 'x1='||x1 + Say 'x2='||x2 + Exit +sqrt: +/* REXX *************************************************************** +* EXEC to calculate the square root of x with high precision +**********************************************************************/ + Parse Arg x + prec=digits() + prec1=2*prec + eps=10**(-prec1) + k = 1 + Numeric Digits prec1 + r0= x + r = 1 + Do i=1 By 1 Until r=r0 | (abs(r*r-x)