src/HOL/Matrix/FloatArith.ML
author webertj
Sun, 14 Nov 2004 01:40:27 +0100
changeset 15283 f21466450330
parent 15189 9cfbc392918c
permissions -rw-r--r--
DOCTYPE declaration added
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
15178
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
     1
structure FloatArith = 
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
     2
struct
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
     3
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
     4
type float = IntInf.int * IntInf.int 
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
     5
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
     6
val izero = IntInf.fromInt 0
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
     7
fun imul a b = IntInf.* (a,b)
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
     8
fun isub a b = IntInf.- (a,b)
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
     9
fun iadd a b = IntInf.+ (a,b)
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    10
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    11
val floatzero = (izero, izero)
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    12
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    13
fun positive_part (a,b) = 
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    14
    (if IntInf.< (a,izero) then izero else a, b)
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    15
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    16
fun negative_part (a,b) = 
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    17
    (if IntInf.< (a,izero) then a else izero, b)
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    18
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    19
fun is_negative (a,b) = 
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    20
    if IntInf.< (a, izero) then true else false
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    21
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    22
fun is_positive (a,b) = 
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    23
    if IntInf.< (izero, a) then true else false
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    24
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    25
fun is_zero (a,b) = 
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    26
    if a = izero then true else false
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    27
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    28
fun ipow2 a = IntInf.pow ((IntInf.fromInt 2), IntInf.toInt a)
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    29
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    30
fun add (a1, b1) (a2, b2) = 
15189
9cfbc392918c Adapted FloatArith.ML to SMLNJ 10.0.7
obua
parents: 15178
diff changeset
    31
    if IntInf.< (b1, b2) then
15178
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    32
	(iadd a1 (imul a2 (ipow2 (isub b2 b1))), b1)
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    33
    else
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    34
	(iadd (imul a1 (ipow2 (isub b1 b2))) a2, b2)
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    35
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    36
fun sub (a1, b1) (a2, b2) = 
15189
9cfbc392918c Adapted FloatArith.ML to SMLNJ 10.0.7
obua
parents: 15178
diff changeset
    37
    if IntInf.< (b1, b2) then
15178
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    38
	(isub a1 (imul a2 (ipow2 (isub b2 b1))), b1)
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    39
    else
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    40
	(isub (imul a1 (ipow2 (isub b1 b2))) a2, b2)
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    41
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    42
fun neg (a, b) = (IntInf.~ a, b)
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    43
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    44
fun is_equal a b = is_zero (sub a b)
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    45
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    46
fun is_less a b = is_negative (sub a b)
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    47
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    48
fun max a b = if is_less a b then b else a
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    49
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    50
fun min a b = if is_less a b then a else b
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    51
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    52
fun abs a = if is_negative a then neg a else a
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    53
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    54
fun mul (a1, b1) (a2, b2) = (imul a1 a2, iadd b1 b2)
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    55
5f621aa35c25 Matrix theory, linear programming
obua
parents:
diff changeset
    56
end;