/## Copyright 2021-2022 Kyle Gunger Dual licensed under the CDDL 1.0 and BSD 3-Clause licenses. This file may only be used in accordance with one of the two licenses. You should have received a copy of each license with the source code. In the event that you did not recieve a copy of the licenses, they may be found at the following URLs: CDDL 1.0: https://opensource.org/licenses/CDDL-1.0 BSD 3-Clause: https://opensource.org/licenses/BSD-3-Clause THIS SOFTWARE/SOURCE CODE IS PROVIDED "AS IS" WITH NO WARRANTY, GUARANTEE, OR CLAIM OF FITNESS FOR ANY PURPOSE EXPRESS OR IMPLIED #/ # ABS functions /; abs (int a) [int] /; if (a < 0) ;return -a ;/ ;return a ;/ /; abs_f (float a) [float] /; if (a < 0) ;return -a ;/ ;return a ;/ /; abs_t (type T, T a) [T] /; if ( a < (0)[T] ) ;return -a ;/ ;return a ;/ # Div funcs /; div (int a, b) [int, int] ;int o1 = a / b, o2 = a % b ;return o1, o2 ;/ /; div_f (float a, b) [float, float] ;float o1 = a / b, o2 = a % b ;return o1, o2 ;/ /; div_t (type T, T a, b) [T, T] ;T o1 = a / b, o2 = a % b ;return o1, o2 ;/ # Min/Max functions /; max (int a, b) [int] /; if (a > b) ;return a ;/ ;return b ;/ /; max_f (float a, b) [float] /; if (a > b) ;return a ;/ ;return b ;/ /; max_t (type T, T a, b) [T] /; if (a > b) ;return a ;/ ;return b ;/ /; min (int a, b) [int] /; if (a < b) ;return a ;/ ;return b ;/ /; min_f (float a, b) [float] /; if (a > b) ;return a ;/ ;return b ;/ /; min_t (type T, T a, b) [T] /; if (a < b) ;return a ;/ ;return b ;/ # Float rounding /; trunc (float a) [float] ;return a - (a % 1.0) ;/ /; trunc_t (type T, T a) [T] ;return a - (a % (1.0)[T]) ;/ /; ceil (float a) [float] /; if (trunc(a) !== a) ;return trunc(a + 1.0) ;/ ;return a ;/ /; ceil_t (type T, T a) [T] /; if (trunc_t(T, a) !== a) ;return trunc_t(T, a + (1.0)[T]) ;/ ;return a ;/ /; floor (float a) [float] /; if (trunc(a) !== a) ;return trunc(a - 1.0) ;/ ;return a ;/ /; floor_t (type T, T a) [T] /; if (trunc_t(T, a) !== a) ;return trunc_t(T, a - (1.0)[T]) ;/ ;return a ;/ /; round (float a) [float] /; if (a % 1.0 < 0.5) ;return floor(a) ;/ ;return ceil(a) ;/ /; round_t (type T, T a) [T] /; if (a % (1.0)[T] < (0.5)[T]) ;return floor_t(T, a) ;/ ;return ceil_t(T, a) ;/