File: substraction.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,713 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 SubstractionSingle
  use real.RealInfix
  use real.Abs
  use ufloat.USingle
  use ufloat.USingleLemmas

  let substraction_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 substraction_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 SubstractionDouble
  use real.RealInfix
  use real.Abs
  use ufloat.UDouble
  use ufloat.UDoubleLemmas

  let substraction_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 substraction_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