Prolog "math"

Admin User, created Apr 06. 2025
         
/**
* Warranty & Liability
* To the extent permitted by applicable law and unless explicitly
* otherwise agreed upon, XLOG Technologies AG makes no warranties
* regarding the provided information. XLOG Technologies AG assumes
* no liability that any problems might be solved with the information
* provided by XLOG Technologies AG.
*
* Rights & License
* All industrial property rights regarding the information - copyright
* and patent rights in particular - are the sole property of XLOG
* Technologies AG. If the company was not the originator of some
* excerpts, XLOG Technologies AG has at least obtained the right to
* reproduce, change and translate the information.
*
* Reproduction is restricted to the whole unaltered document. Reproduction
* of the information is only allowed for non-commercial uses. Selling,
* giving away or letting of the execution of the library is prohibited.
* The library can be distributed as part of your applications and libraries
* for execution provided this comment remains unchanged.
*
* Restrictions
* Only to be distributed with programs that add significant and primary
* functionality to the library. Not to be distributed with additional
* software intended to replace any components of the library.
*
* Trademarks
* Jekejeke is a registered trademark of XLOG Technologies AG.
*/
runner_file(common, math, 'XLOG 2.4 math').
/****************************************************************/
/* bits.p extras */
/****************************************************************/
/* msb(X) */
runner_pred(msb, -2, common, math, 'XLOG 2.4.1').
runner_case(msb, -2, common, math, 'XLOG 2.4.1, XLOG 1') :-
X is msb(12), X == 3.
runner_case(msb, -2, common, math, 'XLOG 2.4.1, XLOG 2') :-
X is msb(- 12), X == 3.
runner_case(msb, -2, common, math, 'XLOG 2.4.1, XLOG 3') :-
X is msb(12*2^100), X == 103.
runner_case(msb, -2, common, math, 'XLOG 2.4.1, XLOG 4') :-
X is msb(- 12*2^100), X == 103.
runner_case(msb, -2, common, math, 'XLOG 2.4.1, XLOG 5') :-
X is msb(0), X == -1.
runner_case(msb, -2, common, math, 'XLOG 2.4.1, XLOG 6') :-
X is msb(- 128), X == 6.
runner_case(msb, -2, common, math, 'XLOG 2.4.1, XLOG 7') :-
X is msb(- 2^53), X == 52.
/* lsb(X) */
runner_pred(lsb, -2, common, math, 'XLOG 2.4.2').
runner_case(lsb, -2, common, math, 'XLOG 2.4.2, XLOG 1') :-
X is lsb(12), X == 2.
runner_case(lsb, -2, common, math, 'XLOG 2.4.2, XLOG 2') :-
X is lsb(-12), X == 2.
runner_case(lsb, -2, common, math, 'XLOG 2.4.2, XLOG 3') :-
X is lsb(12*2^100), X == 102.
runner_case(lsb, -2, common, math, 'XLOG 2.4.2, XLOG 4') :-
X is lsb(-12*2^100), X == 102.
/* popcount(X) */
runner_pred(popcount, -2, common, math, 'XLOG 2.4.3').
runner_case(popcount, -2, common, math, 'XLOG 2.4.3, XLOG 1') :-
X is popcount(12), X == 2.
runner_case(popcount, -2, common, math, 'XLOG 2.4.3, XLOG 2') :-
X is popcount(-12), X == 3.
runner_case(popcount, -2, common, math, 'XLOG 2.4.3, XLOG 3') :-
X is popcount(12*2^100), X == 2.
runner_case(popcount, -2, common, math, 'XLOG 2.4.3, XLOG 4') :-
X is popcount(-12*2^100), X == 103.
/* testbit(X, Y) */
runner_pred(testbit,2, common, math, 'XLOG 2.4.4').
runner_case(testbit,2, common, math, 'XLOG 2.4.4, XLOG 1') :-
testbit(77, 3).
runner_case(testbit,2, common, math, 'XLOG 2.4.4, XLOG 2') :-
\+ testbit(77, 4).
runner_case(testbit,2, common, math, 'XLOG 2.4.4, XLOG 3') :-
X is -77*2^100, testbit(X, 104).
runner_case(testbit,2, common, math, 'XLOG 2.4.4, XLOG 4') :-
X is -77*2^100, \+ testbit(X, 103).
/****************************************************************/
/* Random Number */
/****************************************************************/
/* random(F) */
runner_pred(random, 1, common, math, 'XLOG 2.4.5').
runner_case(random, 1, common, math, 'XLOG 2.4.5, XLOG 1') :-
random(X), float(X).
runner_case(random, 1, common, math, 'XLOG 2.4.5, XLOG 2') :-
random(X), X >= 0.
runner_case(random, 1, common, math, 'XLOG 2.4.5, XLOG 3') :-
catch(_ is random, error(E,_), true),
E = type_error(evaluable, random/0).
/* random(M, N) */
runner_pred(random, 2, common, math, 'XLOG 2.4.6').
runner_case(random, 2, common, math, 'XLOG 2.4.6, XLOG 1') :-
Y is (1<<50), random(Y, X), integer(X).
runner_case(random, 2, common, math, 'XLOG 2.4.6, XLOG 2') :-
Y is (1<<50), random(Y, X), X >= 0.
runner_case(random, 2, common, math, 'XLOG 2.4.6, XLOG 3') :-
Y is (1<<50), catch(_ is random(Y), error(E,_), true),
E = type_error(evaluable, random/1).
/****************************************************************/
/* round.p extras */
/****************************************************************/
/* divmod(X,Y,D,M) */
runner_pred(divmod, 4, common, math, 'XLOG 2.4.7').
runner_case(divmod, 4, common, math, 'XLOG 2.4.7, XLOG 1') :-
divmod(7, 35, D, M), D == 0, M == 7.
runner_case(divmod, 4, common, math, 'XLOG 2.4.7, XLOG 2') :-
divmod(140, 14, D, M), D == 10, M == 0.
runner_case(divmod, 4, common, math, 'XLOG 2.4.7, XLOG 3') :-
divmod(7, -2, D, M), D == -4, M == -1.
runner_case(divmod, 4, common, math, 'XLOG 2.4.7, XLOG 4') :-
divmod(-5, 2, D, M), D == -3, M == 1.
runner_case(divmod, 4, common, math, 'XLOG 2.4.7, XLOG 5') :-
divmod(-15211807202738, -1394415660251, D, M),
D == 10, M == -1267650600228.