Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
7
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
Why3
why3
Commits
6cd20c11
Commit
6cd20c11
authored
Aug 22, 2019
by
Sylvain
2
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
why3execute: Adding experimental version of exp and log
parent
bf00d829
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
45 additions
and
3 deletions
+45
-3
bench/interp/real.mlw
bench/interp/real.mlw
+13
-0
src/mlw/big_real.ml
src/mlw/big_real.ml
+17
-1
src/mlw/big_real.mli
src/mlw/big_real.mli
+2
-0
src/mlw/pinterp.ml
src/mlw/pinterp.ml
+6
-0
src/util/mlmpfr_dummy.ml
src/util/mlmpfr_dummy.ml
+3
-0
src/util/mlmpfr_wrapper.mli
src/util/mlmpfr_wrapper.mli
+2
-0
stdlib/real.mlw
stdlib/real.mlw
+2
-2
No files found.
bench/interp/real.mlw
View file @
6cd20c11
...
@@ -3,6 +3,7 @@ module R
...
@@ -3,6 +3,7 @@ module R
use real.Real
use real.Real
use ref.Ref
use ref.Ref
use real.Square
use real.Square
use real.ExpLog
exception BenchFailure
exception BenchFailure
...
@@ -23,6 +24,18 @@ module R
...
@@ -23,6 +24,18 @@ module R
let y : real = 1.0 / x in
let y : real = 1.0 / x in
(x, y, 3.0 * y)
(x, y, 3.0 * y)
let test_exp () =
let x: real = 1.0 in
exp x
let test_log () =
let x: real = 1.0 in
log x
let test_exp_log () =
let x: real = 42.0 in
exp (log x), log x, exp x
let bench1 ()
let bench1 ()
(* Tries to calculate sqrt(2) *)
(* Tries to calculate sqrt(2) *)
diverges
diverges
...
...
src/mlw/big_real.ml
View file @
6cd20c11
...
@@ -134,7 +134,7 @@ let div x y =
...
@@ -134,7 +134,7 @@ let div x y =
let
sqrt
(
xmin
,
xmax
)
=
let
sqrt
(
xmin
,
xmax
)
=
set_exponents
()
;
set_exponents
()
;
let
prec
=
get_prec
()
in
let
prec
=
get_prec
()
in
let
zero
=
get_zero
()
in
let
zero
=
get_zero
()
in
if
lessequal_p
zero
xmin
then
if
lessequal_p
zero
xmin
then
let
res_min
=
sqrt
~
rnd
:
Toward_Minus_Infinity
~
prec
xmin
in
let
res_min
=
sqrt
~
rnd
:
Toward_Minus_Infinity
~
prec
xmin
in
...
@@ -143,6 +143,22 @@ let sqrt (xmin, xmax) =
...
@@ -143,6 +143,22 @@ let sqrt (xmin, xmax) =
else
else
raise
Undetermined
raise
Undetermined
let
exp
(
xmin
,
xmax
)
=
set_exponents
()
;
let
prec
=
get_prec
()
in
(
exp
~
rnd
:
Toward_Minus_Infinity
~
prec
xmin
,
exp
~
rnd
:
Toward_Plus_Infinity
~
prec
xmax
)
let
log
(
xmin
,
xmax
)
=
set_exponents
()
;
let
prec
=
get_prec
()
in
let
zero
=
get_zero
()
in
if
lessequal_p
zero
xmin
then
MARCHE Claude
@marche
·
Aug 22, 2019
Owner
il faut less_p ici, car log 0 n'est pas defini
il faut less_p ici, car log 0 n'est pas defini
DAILLER Sylvain
@sdailler
·
Aug 22, 2019
Developer
fixed
fixed
Please
register
or
sign in
to reply
(
log
~
rnd
:
Toward_Minus_Infinity
~
prec
xmin
,
log
~
rnd
:
Toward_Plus_Infinity
~
prec
xmax
)
else
raise
Undetermined
let
real_from_str
s
=
let
real_from_str
s
=
let
prec
=
get_prec
()
in
let
prec
=
get_prec
()
in
let
n1
=
make_from_str
~
prec
~
base
:
10
~
rnd
:
Toward_Minus_Infinity
s
in
let
n1
=
make_from_str
~
prec
~
base
:
10
~
rnd
:
Toward_Minus_Infinity
s
in
...
...
src/mlw/big_real.mli
View file @
6cd20c11
...
@@ -17,6 +17,8 @@ val add: real -> real -> real
...
@@ -17,6 +17,8 @@ val add: real -> real -> real
val
mul
:
real
->
real
->
real
val
mul
:
real
->
real
->
real
val
div
:
real
->
real
->
real
val
div
:
real
->
real
->
real
val
sqrt
:
real
->
real
val
sqrt
:
real
->
real
val
exp
:
real
->
real
val
log
:
real
->
real
(* Real comparisons *)
(* Real comparisons *)
val
eq
:
real
->
real
->
bool
val
eq
:
real
->
real
->
bool
...
...
src/mlw/pinterp.ml
View file @
6cd20c11
...
@@ -486,10 +486,16 @@ let built_in_modules =
...
@@ -486,10 +486,16 @@ let built_in_modules =
[
"pi"
,
eval_real
Modeconst
(
Big_real
.
pi
()
);
[
"pi"
,
eval_real
Modeconst
(
Big_real
.
pi
()
);
]
]
in
in
let
real_exp_log
=
[
"real"
]
,
"ExpLog"
,
[]
,
[
"exp"
,
eval_real
Mode1r
Big_real
.
exp
;
"log"
,
eval_real
Mode1r
Big_real
.
log
]
in
bool_module
::
(
int_modules
@
[
array_module
;
bool_module
::
(
int_modules
@
[
array_module
;
real_module
;
real_module
;
real_square_module
;
real_square_module
;
real_trigo_module
;
real_trigo_module
;
real_exp_log
;
mode_module
;
mode_module
;
float_modules
32
~
prec
:
24
"Float32"
;
float_modules
32
~
prec
:
24
"Float32"
;
float_modules
64
~
prec
:
53
"Float64"
;])
float_modules
64
~
prec
:
53
"Float64"
;])
...
...
src/util/mlmpfr_dummy.ml
View file @
6cd20c11
...
@@ -28,6 +28,9 @@ let sub ?rnd:_ ?prec:_ _ _ = raise Not_Implemented
...
@@ -28,6 +28,9 @@ let sub ?rnd:_ ?prec:_ _ _ = raise Not_Implemented
let
abs
?
rnd
:_
?
prec
:_
_
=
raise
Not_Implemented
let
abs
?
rnd
:_
?
prec
:_
_
=
raise
Not_Implemented
let
fma
?
rnd
:_
?
prec
:_
_
_
_
=
raise
Not_Implemented
let
fma
?
rnd
:_
?
prec
:_
_
_
_
=
raise
Not_Implemented
let
rint
?
rnd
:_
?
prec
:_
_
=
raise
Not_Implemented
let
rint
?
rnd
:_
?
prec
:_
_
=
raise
Not_Implemented
let
exp
?
rnd
:_
?
prec
:_
_
=
raise
Not_Implemented
let
log
?
rnd
:_
?
prec
:_
_
=
raise
Not_Implemented
let
min
?
rnd
:_
?
prec
:_
_
_
=
raise
Not_Implemented
let
min
?
rnd
:_
?
prec
:_
_
_
=
raise
Not_Implemented
let
max
?
rnd
:_
?
prec
:_
_
_
=
raise
Not_Implemented
let
max
?
rnd
:_
?
prec
:_
_
_
=
raise
Not_Implemented
...
...
src/util/mlmpfr_wrapper.mli
View file @
6cd20c11
...
@@ -36,6 +36,8 @@ val sub: ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float -> mpfr_float
...
@@ -36,6 +36,8 @@ val sub: ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float -> mpfr_float
val
abs
:
?
rnd
:
mpfr_rnd_t
->
?
prec
:
int
->
mpfr_float
->
mpfr_float
val
abs
:
?
rnd
:
mpfr_rnd_t
->
?
prec
:
int
->
mpfr_float
->
mpfr_float
val
fma
:
?
rnd
:
mpfr_rnd_t
->
?
prec
:
int
->
mpfr_float
->
mpfr_float
->
mpfr_float
->
mpfr_float
val
fma
:
?
rnd
:
mpfr_rnd_t
->
?
prec
:
int
->
mpfr_float
->
mpfr_float
->
mpfr_float
->
mpfr_float
val
rint
:
?
rnd
:
mpfr_rnd_t
->
?
prec
:
int
->
mpfr_float
->
mpfr_float
val
rint
:
?
rnd
:
mpfr_rnd_t
->
?
prec
:
int
->
mpfr_float
->
mpfr_float
val
exp
:
?
rnd
:
mpfr_rnd_t
->
?
prec
:
int
->
mpfr_float
->
mpfr_float
val
log
:
?
rnd
:
mpfr_rnd_t
->
?
prec
:
int
->
mpfr_float
->
mpfr_float
val
min
:
?
rnd
:
mpfr_rnd_t
->
?
prec
:
int
->
mpfr_float
->
mpfr_float
->
mpfr_float
val
min
:
?
rnd
:
mpfr_rnd_t
->
?
prec
:
int
->
mpfr_float
->
mpfr_float
->
mpfr_float
...
...
stdlib/real.mlw
View file @
6cd20c11
...
@@ -228,13 +228,13 @@ module ExpLog
...
@@ -228,13 +228,13 @@ module ExpLog
use Real
use Real
function exp real : real
val
function exp real : real
axiom Exp_zero : exp(0.0) = 1.0
axiom Exp_zero : exp(0.0) = 1.0
axiom Exp_sum : forall x y:real. exp (x+y) = exp x * exp y
axiom Exp_sum : forall x y:real. exp (x+y) = exp x * exp y
constant e : real = exp 1.0
constant e : real = exp 1.0
function log real : real
val
function log real : real
axiom Log_one : log 1.0 = 0.0
axiom Log_one : log 1.0 = 0.0
axiom Log_mul :
axiom Log_mul :
forall x y:real. x > 0.0 /\ y > 0.0 -> log (x*y) = log x + log y
forall x y:real. x > 0.0 /\ y > 0.0 -> log (x*y) = log x + log y
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment