:- module math. :- use_module builtin, exception, float, private_builtin. :- pragma foreign_import_module("C", math). :- pragma foreign_proc("C", math:pi = (Pi :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io, promise_pure], " Pi = ML_FLOAT_PI; "). :- pragma foreign_proc("C", math:e = (E :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io, promise_pure], " E = ML_FLOAT_E; "). :- pragma foreign_proc("C", math:ceiling(Num :: (builtin:in)) = (Ceil :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io, promise_pure], " Ceil = ceil(Num); "). :- pragma foreign_proc("C", math:floor(Num :: (builtin:in)) = (Floor :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io, promise_pure], " Floor = floor(Num); "). :- pragma foreign_proc("C", math:round(Num :: (builtin:in)) = (Rounded :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io, promise_pure], " Rounded = floor(Num+0.5); "). math:truncate(X_3) = HeadVar__2_2 :- (if V_4 = 0.00000000000000, float:(X_3 < V_4) then HeadVar__2_2 = math:ceiling(X_3) else HeadVar__2_2 = math:floor(X_3) ). :- pragma foreign_proc("C", math:exp(X :: (builtin:in)) = (Exp :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io, promise_pure], " Exp = exp(X); "). :- pragma foreign_proc("C", math:sin(X :: (builtin:in)) = (Sin :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io, promise_pure], " Sin = sin(X); "). :- pragma foreign_proc("C", math:cos(X :: (builtin:in)) = (Cos :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io, promise_pure], " Cos = cos(X); "). :- pragma foreign_proc("C", math:tan(X :: (builtin:in)) = (Tan :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io, promise_pure], " Tan = tan(X); "). :- pragma foreign_proc("C", math:atan(X :: (builtin:in)) = (ATan :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io, promise_pure], " ATan = atan(X); "). :- pragma foreign_proc("C", math:atan2(Y :: (builtin:in), X :: (builtin:in)) = (ATan2 :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io, promise_pure], " ATan2 = atan2(Y, X); "). :- pragma foreign_proc("C", math:sinh(X :: (builtin:in)) = (Sinh :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io, promise_pure], " Sinh = sinh(X); "). :- pragma foreign_proc("C", math:cosh(X :: (builtin:in)) = (Cosh :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io, promise_pure], " Cosh = cosh(X); "). :- pragma foreign_proc("C", math:tanh(X :: (builtin:in)) = (Tanh :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io, promise_pure], " Tanh = tanh(X); "). :- pragma termination_info((math:pi) = (builtin:out), infinite, cannot_loop). :- pragma termination_info((math:e) = (builtin:out), infinite, cannot_loop). :- pragma termination_info(math:ceiling((builtin:in)) = (builtin:out), infinite, cannot_loop). :- pragma termination_info(math:floor((builtin:in)) = (builtin:out), infinite, cannot_loop). :- pragma termination_info(math:round((builtin:in)) = (builtin:out), infinite, cannot_loop). :- pragma termination_info(math:truncate((builtin:in)) = (builtin:out), infinite, cannot_loop). :- pragma termination_info(math:sqrt((builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(math:solve_quadratic((builtin:in), (builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(math:pow((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(math:exp((builtin:in)) = (builtin:out), infinite, cannot_loop). :- pragma termination_info(math:ln((builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(math:log10((builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(math:log2((builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(math:log((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(math:sin((builtin:in)) = (builtin:out), infinite, cannot_loop). :- pragma termination_info(math:cos((builtin:in)) = (builtin:out), infinite, cannot_loop). :- pragma termination_info(math:tan((builtin:in)) = (builtin:out), infinite, cannot_loop). :- pragma termination_info(math:asin((builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(math:acos((builtin:in)) = (builtin:out), infinite, can_loop). :- pragma termination_info(math:atan((builtin:in)) = (builtin:out), infinite, cannot_loop). :- pragma termination_info(math:atan2((builtin:in), (builtin:in)) = (builtin:out), infinite, cannot_loop). :- pragma termination_info(math:sinh((builtin:in)) = (builtin:out), infinite, cannot_loop). :- pragma termination_info(math:cosh((builtin:in)) = (builtin:out), infinite, cannot_loop). :- pragma termination_info(math:tanh((builtin:in)) = (builtin:out), infinite, cannot_loop).