Trigonometric functions: Difference between revisions

Content added Content deleted
(Add Nimrod)
(→‎{{header|ooRexx}}: improved rxmlog performance using Vladimir Zabrodsky's code)
Line 1,636: Line 1,636:
rxmsin(1) =0.84147098480789650665250232163029899962256306079837</pre>
rxmsin(1) =0.84147098480789650665250232163029899962256306079837</pre>


<lang oorexx>/*********************************************************************
<lang oorexx>/********************************************************************
* Package rxm
* Package rxm
* implements the functions available in RxMath with high precision
* implements the functions available in RxMath with high precision
Line 1,656: Line 1,656:
* 24.04.2014 WP arcsin verbessert. courtesy Horst Wegscheider
* 24.04.2014 WP arcsin verbessert. courtesy Horst Wegscheider
* 28.04.2014 WP run ooRexxDoc
* 28.04.2014 WP run ooRexxDoc
* 11.08.2014 WP replace log algorithm with Vladimir Zabrodsky's code
* 12.05.2014 WP added routine rxmhelp
**********************************************************************/
**********************************************************************/
.local~my.rxm=.rxm~new(16,"D")
.local~my.rxm=.rxm~new(16,"D")
Line 1,936: Line 1,936:
Expose precision
Expose precision
Use Strict Arg x,xprec=(precision),xbase=''
Use Strict Arg x,xprec=(precision),xbase=''
iprec=xprec+10
iprec=xprec+100
Numeric Digits iprec
Numeric Digits iprec
Select
Select
When x=0 Then Return '-infinity'
When x=0 Then Return '-infinity'
When x<0 Then Return 'nan'
When x<0 Then Return 'nan'
When x<0.5 Then Do
When x<1 Then r= -self~Log(1/X,xprec)
Otherwise Do
z=(x-1)/(x+1)
do M = 0 until (2 ** M) > X; end
o=z
r=z
M = M - 1
k=1
Z = X / (2 ** M)
Do i=3 By 2 Until ra=r
Zeta = (1 - Z) / (1 + Z)
N = Zeta; Ln = Zeta; Zetasup2 = Zeta * Zeta
ra=r
k=k+1
do J = 1
o=o*z*z
N = N * Zetasup2; NewLn = Ln + N / (2 * J + 1)
r=r+o/i
if NewLn = Ln then Do
r= M * self~LN2P(xprec) - 2 * Ln
End
r=2*r
Leave
End
End
When x<1.5 Then Do
Ln = NewLn
z=(x-1)
end
o=z
r=z
k=1
Do i=2 By 1 Until ra=r
ra=r
k=k+1
o=-o*z
r=r+o/i
End
End
Otherwise /* 1.5<=x */ Do
z=(x+1)/(x-1)
o=1/z
r=o
k=1
Do i=3 By 2 Until ra=r
ra=r
k=k+1
o=o/(z*z)
r=r+o/i
End
r=2*r
End
End
End
End
Line 1,987: Line 1,965:
End
End
Return r
Return r

::Method ln2p
Parse Arg p
Numeric Digits p+10
If p<=1000 Then
Return self~ln2()
n=1/3
ln=n
zetasup2=1/9
Do j=1
n=n*zetasup2
newln=ln+n/(2*j+1)
If newln=ln Then
Return 2*ln
ln=newln
End

::Method LN2
V = ''
V = V || 0.69314718055994530941723212145817656807
V = V || 5500134360255254120680009493393621969694
V = V || 7156058633269964186875420014810205706857
V = V || 3368552023575813055703267075163507596193
V = V || 0727570828371435190307038623891673471123350
v=''
v=v||0.69314718055994530941723212145817656807
v=v||5500134360255254120680009493393621969694
v=v||7156058633269964186875420014810205706857
v=v||3368552023575813055703267075163507596193
v=v||0727570828371435190307038623891673471123
v=v||3501153644979552391204751726815749320651
v=v||5552473413952588295045300709532636664265
v=v||4104239157814952043740430385500801944170
v=v||6416715186447128399681717845469570262716
v=v||3106454615025720740248163777338963855069
v=v||5260668341137273873722928956493547025762
v=v||6520988596932019650585547647033067936544
v=v||3254763274495125040606943814710468994650
v=v||6220167720424524529612687946546193165174
v=v||6813926725041038025462596568691441928716
v=v||0829380317271436778265487756648508567407
v=v||7648451464439940461422603193096735402574
v=v||4460703080960850474866385231381816767514
v=v||3866747664789088143714198549423151997354
v=v||8803751658612753529166100071053558249879
v=v||4147295092931138971559982056543928717000
v=v||7218085761025236889213244971389320378439
v=v||3530887748259701715591070882368362758984
v=v||2589185353024363421436706118923678919237
v=v||231467232172053401649256872747782344535348

return V


::Method log10
::Method log10
Line 2,629: Line 2,659:


return .my.rxm~tanh(x,xprec)
return .my.rxm~tanh(x,xprec)



::routine rxmhelp public
::routine rxmhelp public
Line 2,643: Line 2,672:
Say " .locaL~my.rxm~precision=50"
Say " .locaL~my.rxm~precision=50"
Say " .locaL~my.rxm~type='R'"
Say " .locaL~my.rxm~type='R'"
return 0 </lang>
return 0</lang>


=={{header|Oz}}==
=={{header|Oz}}==