Category:Action! Real Math: Difference between revisions

(Created page with "=== REALMATH.ACT === The following module has been prepared for RosettaCode to provide basic functions and procedures related to floating point numbers which are missing or i...")
 
 
Line 115:
 
PROC Trunc(REAL POINTER x,res)
BYTE ARRAY b
REAL tmp1,tmp2
INTBYTE texp
 
IF RealEqualRealAssign(x,rzerores) THEN
RealAssign(x,b=res)
exp=b(0)&$7F
ELSEIF IsNegative(x) THEN
IF exp<=67 THEN
RealAdd(x,half,tmp1)
b(5)=0
ELSE
IF exp<=66 THEN b(4)=0 FI
RealSub(x,half,tmp1)
IF exp<=65 THEN b(3)=0 FI
IF exp<=64 THEN b(2)=0 FI
IF exp<=63 THEN b(0)=0 b(1)=0 FI
FI
t=Round(tmp1)
IntToRealForNeg(t,res)
RETURN
 
Line 134 ⟶ 135:
Trunc(x,t)
RealSub(x,t,res)
RETURN
 
PROC RealDivInt(REAL POINTER x,n,res)
REAL tmp1,tmp2r
 
RealDiv(x,n,r)
Trunc(r,res)
RETURN
 
PROC RealMod(REAL POINTER x,n,res)
RealDivInt(x,n,res)
RealMult(res,n,res)
RealSub(x,halfres,tmp1res)
RETURN
 
Anonymous user