1 % (c) 2012 Lehrstuhl fuer Softwaretechnik und Programmiersprachen,
2 % Heinrich Heine Universitaet Duesseldorf
3 % This software is licenced under EPL 1.0 (http://www.eclipse.org/org/documents/epl-v10.html)
4
5 :- module(interval_calc,[interval_addition/3
6 ,interval_subtraction/3
7 ,interval_multiplication/3
8 ,interval_negation/2
9 ]).
10
11 :- use_module(module_information,[module_info/2]).
12 :- module_info(group,analysis).
13 :- module_info(description,'This module provides methods to calculate with interval expressions.').
14
15 :- use_module(inf_arith).
16
17 interval_addition(irange(Am,AM),irange(Bm,BM),irange(Cm,CM)) :-
18 Cm infis Am+Bm, CM infis AM+BM.
19 interval_subtraction(irange(Am,AM),irange(Bm,BM),irange(Cm,CM)) :-
20 Cm infis Am-BM, CM infis AM-Bm.
21 interval_multiplication(irange(Am,AM),irange(Bm,BM),irange(Cm,CM)) :-
22 MultExprs = [Am*Bm,Am*BM,AM*Bm,AM*BM],
23 get_min(MultExprs,Cm),
24 get_max(MultExprs,CM).
25 interval_negation(irange(Am,AM),irange(Cm,CM)) :-
26 CM infis -Am, Cm infis -AM.
27
28 get_min([A],Min) :- !, Min infis A.
29 get_min([A|Rest],Min) :-
30 get_min(Rest,Rmin), Min infis min(A,Rmin).
31 get_max([A],Max) :- !,Max infis A.
32 get_max([A|Rest],Max) :-
33 get_max(Rest,Rmax), Max infis max(A,Rmax).