File: addition.mlw

package info (click to toggle)
why3 1.8.2-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 45,028 kB
  • sloc: xml: 185,443; ml: 111,224; ansic: 3,998; sh: 2,578; makefile: 2,568; java: 865; python: 720; javascript: 290; lisp: 205; pascal: 173
file content (49 lines) | stat: -rw-r--r-- 1,677 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
module AdditionSingle
  use real.RealInfix
  use real.Abs
  use ufloat.USingle
  use ufloat.USingleLemmas

  let addition_errors_basic (a b c : usingle)
    ensures {
      let exact = to_real a +. to_real b +. to_real c in
      let exact_abs = abs (to_real a) +. abs (to_real b) +. abs (to_real c) in
      abs (to_real result -. exact) <=. 2. *. eps *. exact_abs
    }
  = a ++. b ++. c

  let addition_errors (a b c d e f : usingle)
    ensures {
      let exact = to_real a +. to_real b +. to_real c +. to_real d +.
                  to_real e +. to_real f in
      let exact_abs = abs (to_real a) +. abs (to_real b) +. abs (to_real c) +.
                      abs (to_real d) +. abs (to_real e) +. abs (to_real f) in
      abs (to_real result -. exact) <=. 5. *. eps *. exact_abs
    }
  = (a ++. b ++. c) ++. (d ++. (e ++. f))
end

module AdditionDouble
  use real.RealInfix
  use real.Abs
  use ufloat.UDouble
  use ufloat.UDoubleLemmas

  let addition_errors_basic (a b c : udouble)
    ensures {
      let exact = to_real a +. to_real b +. to_real c in
      let exact_abs = abs (to_real a) +. abs (to_real b) +. abs (to_real c) in
      abs (to_real result -. exact) <=. 2. *. eps *. exact_abs
    }
  = a ++. b ++. c

  let addition_errors (a b c d e f : udouble)
    ensures {
      let exact = to_real a +. to_real b +. to_real c +. to_real d +.
                  to_real e +. to_real f in
      let exact_abs = abs (to_real a) +. abs (to_real b) +. abs (to_real c) +.
                      abs (to_real d) +. abs (to_real e) +. abs (to_real f) in
      abs (to_real result -. exact) <=. 5. *. eps *. exact_abs
    }
  = (a ++. b ++. c) ++. (d ++. (e ++. f))
end