1
- Require Import CRtrans Compress.
2
- Require Import ARtrans ARbigD.
1
+ From CoRN Require Import CRtrans Compress ARtrans ARbigD.
3
2
4
3
Definition eval (n:positive) (r : CR) : Q :=
5
- let m := iter_pos n _ (Pmult 10) 1%positive in approximate r (1#m)% Qpos.
4
+ let m := Pos.iter (Pmult 10) 1%positive n in approximate r (1#m :> Qpos) .
6
5
7
6
Definition deval (n:positive) (r : ARbigD) : bigD :=
8
- let m := iter_pos n _ (Pmult 10) 1%positive in approximate r (1#m)% Qpos.
7
+ let m := Pos.iter (Pmult 10) 1%positive n in approximate r (1#m :> Qpos) .
9
8
10
- Let ARtest1 : ARbigD := ARpi.
11
- Let CRtest1 : CR := CRpi.
9
+ Definition ARtest1 : ARbigD := ARpi.
10
+ Definition CRtest1 : CR := CRpi.
12
11
13
- Let ARtest2 : ARbigD := ARexp (ARcompress (ARexp (ARcompress (AQexp (1 ≪ (-1)))))).
14
- Let CRtest2 : CR := exp (compress (exp (compress (rational_exp (1#2))))).
12
+ Definition ARtest2 : ARbigD := ARexp (ARcompress (ARexp (ARcompress (AQexp (1 ≪ (-1)))))).
13
+ Definition CRtest2 : CR := exp (compress (exp (compress (rational_exp (1#2))))).
15
14
16
- Let ARtest3 : ARbigD := ARexp (ARcompress ARpi) - ARpi.
17
- Let CRtest3 : CR := exp (compress CRpi) - CRpi.
15
+ Definition ARtest3 : ARbigD := ARexp (ARcompress ARpi) - ARpi.
16
+ Definition CRtest3 : CR := exp (compress CRpi) - CRpi.
18
17
19
- Let ARtest4 : ARbigD := ARarctan (ARcompress ARpi).
20
- Let CRtest4 : CR := arctan (compress CRpi).
18
+ Definition ARtest4 : ARbigD := ARarctan (ARcompress ARpi).
19
+ Definition CRtest4 : CR := arctan (compress CRpi).
21
20
22
- Let ARtest5 : ARbigD := ARcos ('(10^50)%Z).
23
- Let CRtest5 : CR := cos ('inject_Z (10^50)%Z).
21
+ Definition ARtest5 : ARbigD := ARcos ('(10^50)%Z).
22
+ Definition CRtest5 : CR := cos ('inject_Z (10^50)%Z).
24
23
25
- Let ARtest6 : ARbigD := ARsin (ARcompress (ARsin (ARcompress (AQsin 1)))).
26
- Let CRtest6 : CR := sin (compress (sin (compress (rational_sin (1#1))))).
24
+ Definition ARtest6 : ARbigD := ARsin (ARcompress (ARsin (ARcompress (AQsin 1)))).
25
+ Definition CRtest6 : CR := sin (compress (sin (compress (rational_sin (1#1))))).
27
26
28
27
Time Eval vm_compute in (deval 300 ARtest1).
29
- Time Eval vm_compute in (eval 300 CRtest1).
30
- Time Eval vm_compute in (deval 2100 ARtest1).
28
+ Time Eval vm_compute in (eval 30 CRtest1).
29
+ Time Eval vm_compute in (deval 400 ARtest1).
31
30
32
31
Time Eval vm_compute in (deval 25 ARtest2).
33
- Time Eval vm_compute in (eval 25 CRtest2).
34
- Time Eval vm_compute in (deval 425 ARtest2).
32
+ Time Eval vm_compute in (eval 7 CRtest2).
33
+ Time Eval vm_compute in (deval 150 ARtest2).
35
34
36
35
Time Eval vm_compute in (deval 25 ARtest3).
37
- Time Eval vm_compute in (eval 25 CRtest3).
38
- Time Eval vm_compute in (deval 425 ARtest3).
36
+ Time Eval vm_compute in (eval 10 CRtest3).
37
+ Time Eval vm_compute in (deval 200 ARtest3).
39
38
40
39
Time Eval vm_compute in (deval 25 ARtest4).
41
- Time Eval vm_compute in (eval 25 CRtest4).
40
+ Time Eval vm_compute in (eval 5 CRtest4).
42
41
Time Eval vm_compute in (deval 85 ARtest4).
43
42
44
43
Time Eval vm_compute in (deval 40 ARtest5).
45
- Time Eval vm_compute in (eval 40 CRtest5).
46
- Time Eval vm_compute in (deval 3000 ARtest5).
44
+ Time Eval vm_compute in (eval 10 CRtest5).
45
+ Time Eval vm_compute in (deval 200 ARtest5).
47
46
48
47
Time Eval vm_compute in (deval 25 ARtest6).
49
- Time Eval vm_compute in (eval 25 CRtest6).
50
- Time Eval vm_compute in (deval 425 ARtest6).
48
+ Time Eval vm_compute in (eval 10 CRtest6).
49
+ Time Eval vm_compute in (deval 150 ARtest6).
51
50
52
51
(* Finally, we compare our sqrt with an implementation not using type classes *)
53
- Require Import ARroot dyadics.
52
+ From CoRN Require Import ARroot.
53
+ From MathClasses Require Import dyadics.
54
54
55
- Let n := Eval compute in (10 * 10 * 10 * 10)%nat.
56
- Let ARroot_test : nat -> bigD * bigD := AQsqrt_loop (a:=2).
55
+ Definition n := Eval compute in (10 * 10 * 10 * 10)%nat.
56
+ Definition ARroot_test : nat -> bigD * bigD := AQsqrt_loop (a:=2).
57
57
58
58
Time Eval vm_compute in (
59
59
(fun _ _ _ _ _ _ _ _ _ _ => true)
@@ -68,25 +68,25 @@ Time Eval vm_compute in (
68
68
(snd (ARroot_test n))
69
69
(snd (ARroot_test n))).
70
70
71
- Require Import BigZ.
71
+ From Bignums Require Import BigZ.
72
72
Open Scope bigZ_scope.
73
73
74
- Definition BigD_0 : bigD := (0 $ 0).
75
- Definition BigD_1 : bigD := (1 $ 0).
76
- Definition BigD_2 : bigD := (2 $ 0).
77
- Definition BigD_4 : bigD := (4 $ 0).
74
+ Definition BigD_0 : bigD := (0 ▼ 0).
75
+ Definition BigD_1 : bigD := (1 ▼ 0).
76
+ Definition BigD_2 : bigD := (2 ▼ 0).
77
+ Definition BigD_4 : bigD := (4 ▼ 0).
78
78
79
79
Definition BigD_plus (x y : bigD) : bigD :=
80
80
match BigZ.compare (expo x) (expo y) with
81
- | Gt => BigZ.shiftl (mant x) (expo x - expo y) + mant y $ BigZ.min (expo x) (expo y)
82
- | _ => mant x + BigZ.shiftl (mant y) (expo y - expo x) $ BigZ.min (expo x) (expo y)
81
+ | Gt => BigZ.shiftl (mant x) (expo x - expo y) + mant y ▼ BigZ.min (expo x) (expo y)
82
+ | _ => mant x + BigZ.shiftl (mant y) (expo y - expo x) ▼ BigZ.min (expo x) (expo y)
83
83
end .
84
84
85
- Definition BigD_opp (x : bigD) : bigD := -mant x $ expo x.
85
+ Definition BigD_opp (x : bigD) : bigD := -mant x ▼ expo x.
86
86
87
- Definition BigD_mult (x y : bigD) : bigD := mant x * mant y $ expo x + expo y.
87
+ Definition BigD_mult (x y : bigD) : bigD := mant x * mant y ▼ expo x + expo y.
88
88
89
- Definition BigD_shiftl (x : bigD) (n : bigZ) : bigD := mant x $ expo x + n.
89
+ Definition BigD_shiftl (x : bigD) (n : bigZ) : bigD := mant x ▼ expo x + n.
90
90
91
91
Definition BigD_compare (x y : bigD) : comparison :=
92
92
match BigZ.compare (expo x) (expo y) with
0 commit comments