(* Copyright (C) 1991, Digital Equipment Corporation *) (* All rights reserved. *) (* See the file COPYRIGHT for a full description. *) (* Last modified on Thu Nov 21 11:28:46 PST 1991 by muller *) (* modified on Wed Sep 25 01:23:53 1991 by kalsow *) UNSAFE MODULE LongFloat; IMPORT Math, FPU; PROCEDURE Scalb(x: T; n: INTEGER): T = BEGIN RETURN Math.ldexp (x, n); END Scalb; PROCEDURE Logb(<*UNUSED*> x: T): T = BEGIN <* ASSERT FALSE *> END Logb; PROCEDURE ILogb(<*UNUSED*> x: T): INTEGER = BEGIN <* ASSERT FALSE *> END ILogb; PROCEDURE NextAfter(<*UNUSED*> x, y: T): T = BEGIN <* ASSERT FALSE *> END NextAfter; PROCEDURE CopySign(x, y: T): T = VAR xx, yy: FPU.LongRealRep; BEGIN xx := LOOPHOLE (x, FPU.LongRealRep); yy := LOOPHOLE (y, FPU.LongRealRep); xx.sign := yy.sign; RETURN LOOPHOLE (xx, T); END CopySign; PROCEDURE Finite(<*UNUSED*> x: T): BOOLEAN = BEGIN RETURN TRUE; END Finite; PROCEDURE IsNaN(x: T): BOOLEAN = VAR xx := LOOPHOLE (x, FPU.LongRealRep); BEGIN RETURN (xx.sign # 0) AND (xx.exponent = 0); END IsNaN; PROCEDURE Sign(x: T): [0..1] = VAR xx := LOOPHOLE (x, FPU.LongRealRep); BEGIN RETURN xx.sign; END Sign; PROCEDURE Differs(x, y: T): BOOLEAN = BEGIN RETURN (NOT (IsNaN (x) OR IsNaN (y))) AND (x # y); END Differs; PROCEDURE Unordered(x, y: T): BOOLEAN = BEGIN RETURN IsNaN (x) OR IsNaN (y); END Unordered; PROCEDURE Sqrt(x: T): T = BEGIN RETURN Math.sqrt (x); END Sqrt; PROCEDURE Class(x: T): IEEEClass = BEGIN IF IsNaN (x) THEN RETURN IEEEClass.SignalingNaN; ELSIF (x = 0.0d+0) THEN RETURN IEEEClass.Zero; ELSE RETURN IEEEClass.Normal; END; END Class; BEGIN END LongFloat.