RosettaCodeData/Task/Gamma-function/360-Assembly/gamma-function.360

160 lines
4.5 KiB
Plaintext

GAMMAT CSECT
USING GAMMAT,R13
SAVEAR B STM-SAVEAR(R15)
DC 17F'0'
DC CL8'GAMMAT'
STM STM R14,R12,12(R13)
ST R13,4(R15)
ST R15,8(R13)
LR R13,R15
* ---- CODE
LE F4,=E'0'
LH R2,NI
LOOPI EQU *
AE F4,=E'1' xi=xi+1
LER F0,F4
DE F0,=E'10' x=xi/10
STE F0,X
LE F6,X
SE F6,=E'1' xx=x-1.0
LH R4,NT
BCTR R4,0
SLA R4,2
LE F0,T(R4)
STE F0,SUM sum=t(nt)
LH R3,NT
BCTR R3,0
SH R4,=H'4'
LOOPJ CH R3,=H'1' for j=nt-1 downto 1
BL ENDLOOPJ
LE F0,SUM
MER F0,F6 sum*xx
LE F2,T(R4) t(j)
AER F0,F2
STE F0,SUM sum=sum*xx+t(j)
BCTR R3,0
SH R4,=H'4'
B LOOPJ
ENDLOOPJ EQU *
LE F0,=E'1'
DE F0,SUM
STE F0,GAMMA gamma=1/sum
LE F0,X
BAL R14,CONVERT
MVC BUF(8),CONVERTM
LE F0,GAMMA
BAL R14,CONVERT
MVC BUF+9(13),CONVERTM
WTO MF=(E,WTOMSG)
BCT R2,LOOPI
* ---- END CODE
CNOP 0,4
L R13,4(0,R13)
LM R14,R12,12(R13)
XR R15,R15
BR R14
* ---- DATA
NI DC H'30'
NT DC AL2((TEND-T)/4)
T DC E'1.00000000000000000000'
DC E'0.57721566490153286061'
DC E'-0.65587807152025388108'
DC E'-0.04200263503409523553'
DC E'0.16653861138229148950'
DC E'-0.04219773455554433675'
DC E'-0.00962197152787697356'
DC E'0.00721894324666309954'
DC E'-0.00116516759185906511'
DC E'-0.00021524167411495097'
DC E'0.00012805028238811619'
DC E'-0.00002013485478078824'
DC E'-0.00000125049348214267'
DC E'0.00000113302723198170'
DC E'-0.00000020563384169776'
DC E'0.00000000611609510448'
DC E'0.00000000500200764447'
DC E'-0.00000000118127457049'
DC E'0.00000000010434267117'
DC E'0.00000000000778226344'
DC E'-0.00000000000369680562'
DC E'0.00000000000051003703'
DC E'-0.00000000000002058326'
DC E'-0.00000000000000534812'
DC E'0.00000000000000122678'
DC E'-0.00000000000000011813'
DC E'0.00000000000000000119'
DC E'0.00000000000000000141'
DC E'-0.00000000000000000023'
DC E'0.00000000000000000002'
TEND DS 0E
X DS E
SUM DS E
GAMMA DS E
WTOMSG DS 0F
DC AL2(L'BUF),XL2'0000'
BUF DC CL80' '
* Subroutine Convertion Float->Display
CONVERT CNOP 0,4
ME F0,CONVERTC
STE F0,CONVERTF
MVI CONVERTS,X'00'
L R9,CONVERTF
CH R9,=H'0'
BZ CONVERT7
BNL CONVERT1 is negative?
MVI CONVERTS,X'80'
N R9,=X'7FFFFFFF' sign bit
CONVERT1 LR R8,R9
N R8,=X'00FFFFFF'
BNZ CONVERT2
SR R9,R9
B CONVERT7
CONVERT2 LR R8,R9
N R8,=X'FF000000' characteristic
SRL R8,24
CH R8,=H'64'
BH CONVERT3
SR R9,R9
B CONVERT7
CONVERT3 CH R8,=H'72' 2**32
BNH CONVERT4
L R9,=X'7FFFFFFF' biggest
B CONVERT6
CONVERT4 SR R8,R8
SLDL R8,8
CH R8,=H'72'
BL CONVERT5
CH R9,=H'0'
BP CONVERT5
L R9,=X'7FFFFFFF'
B CONVERT6
CONVERT5 SH R8,=H'72'
LCR R8,R8
SLL R8,2
SRL R9,0(R8)
CONVERT6 SR R8,R8
IC R8,CONVERTS
CH R8,=H'0' sign bit set?
BZ CONVERT7
LCR R9,R9
CONVERT7 ST R9,CONVERTB
CVD R9,CONVERTP
MVC CONVERTD,=X'402020202120202020202020'
ED CONVERTD,CONVERTP+2
MVC CONVERTM(6),CONVERTD
MVI CONVERTM+6,C'.'
MVC CONVERTM+7(6),CONVERTD+6
BR R14
*
CONVERTC DC E'1E6' X'45F42400'
CONVERTF DS F
CONVERTB DS F
CONVERTS DS X
CONVERTM DS CL13
CONVERTD DS CL12
CONVERTP DS PL8
*
EQUREGS
EQUREGS REGS=FPR
END GAMMAT