Roots of a quadratic function: Difference between revisions

→‎{{header|REXX}}: add Version 2
(→‎{{header|REXX}}: add Version 2)
Line 1,206:
;'(-5e-014+1.0i -5e-014-1.0i)</lang>
=={{header|REXX}}==
=== Version 1 ===
The REXX language has no SQRT function nor does it have complex numbers.
<br>The SQRT function is included below.
Line 1,272 ⟶ 1,273:
root1= -0.3333333333-0.5333870616i
root2= -0.3333333333+0.5333870616i
</pre>
Version 1 seems to fail for 1 0 1 (x**2+1=0) --[[User:Walterpachl|Walterpachl]] ([[User talk:Walterpachl|talk]]) 09:04, 26 July 2013 (UTC)
=== Version 2 ===
<lang rexx>/* REXX ***************************************************************
* 26.07.2913 Walter Pachl
**********************************************************************/
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)<eps)
r0 = r
r = (r + x/r) / 2
k = min(prec1,2*k)
Numeric Digits (k + 5)
End
Numeric Digits prec
Return (r+0)
exit: Say arg(1) </lang>
Output:
<pre>
Version 1:
a= 1
b= -1.0000000001
c= 0.000000001
 
root1= 0.9999999991
root2= 0.000000001000000001
 
Version 2:
1*x**2-1.0000000001*x+1.e-9 = 0
x1=0.9999999991000000000025
x2=0.0000000009999999999975
</pre>
 
2,295

edits