#include <dk.h>
#include <dktypes.h>
Go to the source code of this file.
Defines | |
#define | M_PI 3.14159265358979323846 |
Define pi if not already defined in math.h. | |
#define | M_PI_2 1.57079632679489661923 |
Define 0.5 * pi if not already defined in math.h. | |
Functions | |
int | dkma_get_error (int r) |
Retrieve last error code, optionally reset. | |
unsigned long | dkma_add_ulong_ok (unsigned long u1, unsigned long u2, int *ok) |
Addition of 2 unsigned long values. | |
unsigned long | dkma_sub_ulong_ok (unsigned long u1, unsigned long u2, int *ok) |
Subtraction of 2 unsigned long values. | |
unsigned long | dkma_mul_ulong_ok (unsigned long u1, unsigned long u2, int *ok) |
Multiplication of 2 unsigned long values. | |
unsigned long | dkma_div_ulong_ok (unsigned long u1, unsigned long u2, int *ok) |
Division of 2 unsigned long values. | |
unsigned long | dkma_add_ulong (unsigned long u1, unsigned long u2) |
Addition of 2 unsigned long values. | |
unsigned long | dkma_sub_ulong (unsigned long u1, unsigned long u2) |
Subtraction of 2 unsigned long values. | |
unsigned long | dkma_mul_ulong (unsigned long u1, unsigned long u2) |
Multiplication of 2 unsigned long values. | |
unsigned long | dkma_div_ulong (unsigned long u1, unsigned long u2) |
Division of 2 unsigned long values. | |
long | dkma_add_long_ok (long l1, long l2, int *ok) |
Addition of 2 long values. | |
long | dkma_sub_long_ok (long l1, long l2, int *ok) |
Subtraction of 2 long values. | |
long | dkma_mul_long_ok (long l1, long l2, int *ok) |
Multiplication of 2 long values. | |
long | dkma_div_long_ok (long l1, long l2, int *ok) |
Division of 2 long values. | |
long | dkma_add_long (long l1, long l2) |
Addition of 2 long values. | |
long | dkma_sub_long (long l1, long l2) |
Subtraction of 2 long values. | |
long | dkma_mul_long (long l1, long l2) |
Multiplication of 2 long values. | |
long | dkma_div_long (long l1, long l2) |
Division of 2 long values. | |
double | dkma_add_double_ok (double d1, double d2, int *ok) |
Addition of 2 double values. | |
double | dkma_sub_double_ok (double d1, double d2, int *ok) |
Subtraction of 2 double values. | |
double | dkma_mul_double_ok (double d1, double d2, int *ok) |
Multiplication of 2 double values. | |
double | dkma_div_double_ok (double d1, double d2, int *ok) |
Division of 2 double values. | |
double | dkma_add_double (double d1, double d2) |
Addition of 2 double values. | |
double | dkma_sub_double (double d1, double d2) |
Substraction of 2 double values. | |
double | dkma_mul_double (double d1, double d2) |
Multiplication of 2 double values. | |
double | dkma_div_double (double d1, double d2) |
Division of 2 double values. | |
double | dkma_ul_to_double_ok (unsigned long ul, int *ok) |
Convert unsigned long to double, save errors. | |
double | dkma_ull_to_double_ok (dk_long_long_unsigned_t ul, int *ok) |
Convert unsigned long long to double, save errors. | |
double | dkma_ul_to_double (unsigned long ul) |
Convert unsigned long to double. | |
double | dkma_ull_to_double (dk_long_long_unsigned_t ul) |
Convert unsigned long to double. | |
double | dkma_l_to_double_ok (long l, int *ok) |
Convert long to double, save errors. | |
double | dkma_l_to_double (long l) |
Convert long to double. | |
unsigned long | dkma_double_to_ul_ok (double d, int *ok) |
Convert double to unsigned long, save range overflow errors. | |
unsigned long | dkma_double_to_ul (double d) |
Convert double to unsigned long. | |
long | dkma_double_to_l_ok (double d, int *ok) |
Convert double to long, save range overflow errors. | |
long | dkma_double_to_l (double d) |
Convert double to long. | |
double | dkma_double_restrict_digits (double x, unsigned d) |
Restrict number of digits after decimal dot. | |
double | dkma_double_restrict_downwards (double x, unsigned d) |
Restrict number of digits after decimal dot, enforce downward rounding. | |
dk_long_long_unsigned_t | dkma_add_ull_ok (dk_long_long_unsigned_t o1,\dk_long_long_unsigned_t o2, int *ok) |
Add 2 long long unsigned values, save range check result. | |
dk_long_long_unsigned_t | dkma_add_ull (dk_long_long_unsigned_t o1, dk_long_long_unsigned_t o2) |
Add 2 long long unsigned values. | |
dk_long_long_unsigned_t | dkma_sub_ull_ok (dk_long_long_unsigned_t o1,\dk_long_long_unsigned_t o2, int *ok) |
Substract 2 long long unsigned values, save range check result. | |
dk_long_long_unsigned_t | dkma_sub_ull (dk_long_long_unsigned_t o1, dk_long_long_unsigned_t o2) |
Substract 2 long long unsigned values. | |
dk_long_long_unsigned_t | dkma_mul_ull_ok (dk_long_long_unsigned_t o1,\dk_long_long_unsigned_t o2, int *ok) |
Multiplicate 2 long long unsigned values, save range check result. | |
dk_long_long_unsigned_t | dkma_mull_ull (dk_long_long_unsigned_t o1, dk_long_long_unsigned_t o2) |
Multiplicate 2 long long unsigned values. | |
dk_long_long_unsigned_t | dkma_div_ull_ok (dk_long_long_unsigned_t o1,\dk_long_long_unsigned_t o2, int *ok) |
Divide 2 long long unsigned values, save range check result. | |
dk_long_long_unsigned_t | dkma_div_ull (dk_long_long_unsigned_t o1, dk_long_long_unsigned_t o2) |
Divide 2 long long unsigned values. | |
double | dkma_rint (double d) |
Round to nearest integer. | |
double | dkma_atan2 (double y, double x) |
Calculate atan2(x,y)=atan(y/x). | |
dk_long_long_unsigned_t | dkma_ull_gcd (dk_long_long_unsigned_t l1, dk_long_long_unsigned_t l2) |
Find greatest common divisor for two numbers. | |
dk_long_long_unsigned_t | dkma_ull_lcm_ok (dk_long_long_unsigned_t l1, dk_long_long_unsigned_t l2, int *ec) |
Calculate least common multiple of two numbers, check for out-of-range result. | |
dk_long_long_unsigned_t | dkma_ull_lcm (dk_long_long_unsigned_t l1, dk_long_long_unsigned_t l2) |
Calculate least common multiple of two numbers. | |
unsigned long | dkma_ul_gcd (unsigned long l1, unsigned long l2) |
Find greatest common divisor for two numbers. | |
unsigned long | dkma_ul_lcm_ok (unsigned long l1, unsigned long l2, int *ec) |
Calculate least common multiple of two numbers, check for out-of-range result. | |
unsigned long | dkma_ul_lcm (unsigned long l1, unsigned long l2) |
Calculate least common multiple of two numbers. | |
long | dkma_l_gcd (long l1, long l2) |
Find greatest common divisor for two numbers. | |
long | dkma_l_lcm_ok (long l1, long l2, int *ec) |
Calculate least common multiple of two numbers, check for out-of-range result. | |
long | dkma_l_lcm (long l1, long l2) |
Calculate least common multiple of two numbers. | |
void | dkma_fputs_double_no_exp (FILE *f, double d) |
Print double to file, avoid exponential notation. | |
void | dkma_fputs_double_str_no_exp (FILE *f, char *s) |
Print double from text to file, avoid exponent notation. |
This module provides mathematical operations doing range checks.
The final argument of dkma_..._ok functions is a pointer to an int variable receiving an error code if there were problems in the function. The variable is left as is if the function is successfull.
Functions without ..._ok save error codes into an internal variable which can be requested and reset. These functions are not thread-safe.
double dkma_add_double | ( | double | d1, | |
double | d2 | |||
) |
Addition of 2 double values.
d1 | Value 1. | |
d2 | Value 2. |
double dkma_add_double_ok | ( | double | d1, | |
double | d2, | |||
int * | ok | |||
) |
Addition of 2 double values.
d1 | Value 1. | |
d2 | Value 2. | |
ok | Pointer to variable to receive the error code (if any). |
long dkma_add_long | ( | long | l1, | |
long | l2 | |||
) |
Addition of 2 long values.
l1 | Value 1. | |
l2 | Value 2. |
long dkma_add_long_ok | ( | long | l1, | |
long | l2, | |||
int * | ok | |||
) |
Addition of 2 long values.
l1 | Value 1. | |
l2 | Value 2. | |
ok | Pointer to variable to receive the error code (if any). |
dk_long_long_unsigned_t dkma_add_ull | ( | dk_long_long_unsigned_t | o1, | |
dk_long_long_unsigned_t | o2 | |||
) |
Add 2 long long unsigned values.
o1 | First value. | |
o2 | Second value. |
dk_long_long_unsigned_t dkma_add_ull_ok | ( | dk_long_long_unsigned_t | o1, | |
\dk_long_long_unsigned_t | o2, | |||
int * | ok | |||
) |
Add 2 long long unsigned values, save range check result.
o1 | First value. | |
o2 | Second value. | |
ok | Pointer to variable receiving error code if any. |
unsigned long dkma_add_ulong | ( | unsigned long | u1, | |
unsigned long | u2 | |||
) |
Addition of 2 unsigned long values.
u1 | Value 1. | |
u2 | Value 2. |
unsigned long dkma_add_ulong_ok | ( | unsigned long | u1, | |
unsigned long | u2, | |||
int * | ok | |||
) |
Addition of 2 unsigned long values.
u1 | Value 1. | |
u2 | Value 2. | |
ok | Pointer to variable to receive the error code (if any). |
double dkma_atan2 | ( | double | y, | |
double | x | |||
) |
Calculate atan2(x,y)=atan(y/x).
This is a fallback for systems having no atan2() function.
y | Height of the point. | |
x | Width of a point. |
double dkma_div_double | ( | double | d1, | |
double | d2 | |||
) |
Division of 2 double values.
d1 | Dividend. | |
d2 | Divisor. |
double dkma_div_double_ok | ( | double | d1, | |
double | d2, | |||
int * | ok | |||
) |
Division of 2 double values.
d1 | Value 1. | |
d2 | Value 2. | |
ok | Pointer to variable to receive the error code (if any). |
long dkma_div_long | ( | long | l1, | |
long | l2 | |||
) |
Division of 2 long values.
l1 | Value 1. | |
l2 | Value 2. |
long dkma_div_long_ok | ( | long | l1, | |
long | l2, | |||
int * | ok | |||
) |
Division of 2 long values.
l1 | Value 1. | |
l2 | Value 2. | |
ok | Pointer to variable to receive the error code (if any). |
dk_long_long_unsigned_t dkma_div_ull | ( | dk_long_long_unsigned_t | o1, | |
dk_long_long_unsigned_t | o2 | |||
) |
Divide 2 long long unsigned values.
o1 | First value. | |
o2 | Second value. |
dk_long_long_unsigned_t dkma_div_ull_ok | ( | dk_long_long_unsigned_t | o1, | |
\dk_long_long_unsigned_t | o2, | |||
int * | ok | |||
) |
Divide 2 long long unsigned values, save range check result.
o1 | First value. | |
o2 | Second value. | |
ok | Pointer to variable receiving error code if any. |
unsigned long dkma_div_ulong | ( | unsigned long | u1, | |
unsigned long | u2 | |||
) |
Division of 2 unsigned long values.
u1 | Value 1. | |
u2 | Value 2. |
unsigned long dkma_div_ulong_ok | ( | unsigned long | u1, | |
unsigned long | u2, | |||
int * | ok | |||
) |
Division of 2 unsigned long values.
u1 | Value 1. | |
u2 | Value 2. | |
ok | Pointer to variable to receive the error code (if any). |
double dkma_double_restrict_digits | ( | double | x, | |
unsigned | d | |||
) |
Restrict number of digits after decimal dot.
x | Original value. | |
d | Number of digits after decimal dot. |
double dkma_double_restrict_downwards | ( | double | x, | |
unsigned | d | |||
) |
Restrict number of digits after decimal dot, enforce downward rounding.
x | Original value. | |
d | Number of digits after decimal dot. |
long dkma_double_to_l | ( | double | d | ) |
Convert double to long.
d | The double value. |
long dkma_double_to_l_ok | ( | double | d, | |
int * | ok | |||
) |
Convert double to long, save range overflow errors.
d | The double value. | |
ok | Pointer to a variable to receive the error code. |
unsigned long dkma_double_to_ul | ( | double | d | ) |
Convert double to unsigned long.
d | The double value. |
unsigned long dkma_double_to_ul_ok | ( | double | d, | |
int * | ok | |||
) |
Convert double to unsigned long, save range overflow errors.
d | The double value. | |
ok | Pointer to variable to receive the error code. |
void dkma_fputs_double_no_exp | ( | FILE * | f, | |
double | d | |||
) |
Print double to file, avoid exponential notation.
f | File to print to. | |
d | Value to print. |
void dkma_fputs_double_str_no_exp | ( | FILE * | f, | |
char * | s | |||
) |
Print double from text to file, avoid exponent notation.
This function is called by dkma_fputs_double_no_exp(), it is not intended for direct use.
f | File to print to. | |
s | String containing the floating point number. |
int dkma_get_error | ( | int | r | ) |
Retrieve last error code, optionally reset.
Retrieve the error code of the last error from the module-internal variable.
r | Flag to indicate whether or not to reset the module-internal variable. |
long dkma_l_gcd | ( | long | l1, | |
long | l2 | |||
) |
Find greatest common divisor for two numbers.
l1 | First operand. | |
l2 | Second operand. |
long dkma_l_lcm | ( | long | l1, | |
long | l2 | |||
) |
Calculate least common multiple of two numbers.
l1 | Operand 1. | |
l2 | Operand 2. |
long dkma_l_lcm_ok | ( | long | l1, | |
long | l2, | |||
int * | ec | |||
) |
Calculate least common multiple of two numbers, check for out-of-range result.
l1 | Operand 1. | |
l2 | Operand 2. | |
ec | Pointer to variable to receive error code. |
double dkma_l_to_double | ( | long | l | ) |
Convert long to double.
l | The long value. |
double dkma_l_to_double_ok | ( | long | l, | |
int * | ok | |||
) |
Convert long to double, save errors.
l | The long value. | |
ok | Pointer to a variable to receive the error code. |
double dkma_mul_double | ( | double | d1, | |
double | d2 | |||
) |
Multiplication of 2 double values.
d1 | Factor 1. | |
d2 | Factor 2. |
double dkma_mul_double_ok | ( | double | d1, | |
double | d2, | |||
int * | ok | |||
) |
Multiplication of 2 double values.
d1 | Value 1. | |
d2 | Value 2. | |
ok | Pointer to variable to receive the error code (if any). |
long dkma_mul_long | ( | long | l1, | |
long | l2 | |||
) |
Multiplication of 2 long values.
l1 | Value 1. | |
l2 | Value 2. |
long dkma_mul_long_ok | ( | long | l1, | |
long | l2, | |||
int * | ok | |||
) |
Multiplication of 2 long values.
l1 | Value 1. | |
l2 | Value 2. | |
ok | Pointer to variable to receive the error code (if any). |
dk_long_long_unsigned_t dkma_mul_ull_ok | ( | dk_long_long_unsigned_t | o1, | |
\dk_long_long_unsigned_t | o2, | |||
int * | ok | |||
) |
Multiplicate 2 long long unsigned values, save range check result.
o1 | First value. | |
o2 | Second value. | |
ok | Pointer to variable receiving error code if any. |
unsigned long dkma_mul_ulong | ( | unsigned long | u1, | |
unsigned long | u2 | |||
) |
Multiplication of 2 unsigned long values.
u1 | Value 1. | |
u2 | Value 2. |
unsigned long dkma_mul_ulong_ok | ( | unsigned long | u1, | |
unsigned long | u2, | |||
int * | ok | |||
) |
Multiplication of 2 unsigned long values.
u1 | Value 1. | |
u2 | Value 2. | |
ok | Pointer to variable to receive the error code (if any). |
dk_long_long_unsigned_t dkma_mull_ull | ( | dk_long_long_unsigned_t | o1, | |
dk_long_long_unsigned_t | o2 | |||
) |
Multiplicate 2 long long unsigned values.
o1 | First value. | |
o2 | Second value. |
double dkma_rint | ( | double | d | ) |
Round to nearest integer.
This is a fallback function for systems having no rint() function.
d | Original number. |
double dkma_sub_double | ( | double | d1, | |
double | d2 | |||
) |
Substraction of 2 double values.
d1 | Value 1. | |
d2 | Value 2. |
double dkma_sub_double_ok | ( | double | d1, | |
double | d2, | |||
int * | ok | |||
) |
Subtraction of 2 double values.
d1 | Value 1. | |
d2 | Value 2. | |
ok | Pointer to variable to receive the error code (if any). |
long dkma_sub_long | ( | long | l1, | |
long | l2 | |||
) |
Subtraction of 2 long values.
l1 | Value 1. | |
l2 | Value 2. |
long dkma_sub_long_ok | ( | long | l1, | |
long | l2, | |||
int * | ok | |||
) |
Subtraction of 2 long values.
l1 | Value 1. | |
l2 | Value 2. | |
ok | Pointer to variable to receive the error code (if any). |
dk_long_long_unsigned_t dkma_sub_ull | ( | dk_long_long_unsigned_t | o1, | |
dk_long_long_unsigned_t | o2 | |||
) |
Substract 2 long long unsigned values.
o1 | First value. | |
o2 | Second value. |
dk_long_long_unsigned_t dkma_sub_ull_ok | ( | dk_long_long_unsigned_t | o1, | |
\dk_long_long_unsigned_t | o2, | |||
int * | ok | |||
) |
Substract 2 long long unsigned values, save range check result.
o1 | First value. | |
o2 | Second value. | |
ok | Pointer to variable receiving error code if any. |
unsigned long dkma_sub_ulong | ( | unsigned long | u1, | |
unsigned long | u2 | |||
) |
Subtraction of 2 unsigned long values.
u1 | Value 1. | |
u2 | Value 2. |
unsigned long dkma_sub_ulong_ok | ( | unsigned long | u1, | |
unsigned long | u2, | |||
int * | ok | |||
) |
Subtraction of 2 unsigned long values.
u1 | Value 1. | |
u2 | Value 2. | |
ok | Pointer to variable to receive the error code (if any). |
unsigned long dkma_ul_gcd | ( | unsigned long | l1, | |
unsigned long | l2 | |||
) |
Find greatest common divisor for two numbers.
l1 | First operand. | |
l2 | Second operand. |
unsigned long dkma_ul_lcm | ( | unsigned long | l1, | |
unsigned long | l2 | |||
) |
Calculate least common multiple of two numbers.
l1 | Operand 1. | |
l2 | Operand 2. |
unsigned long dkma_ul_lcm_ok | ( | unsigned long | l1, | |
unsigned long | l2, | |||
int * | ec | |||
) |
Calculate least common multiple of two numbers, check for out-of-range result.
l1 | Operand 1. | |
l2 | Operand 2. | |
ec | Pointer to variable to receive error code. |
double dkma_ul_to_double_ok | ( | unsigned long | ul, | |
int * | ok | |||
) |
Convert unsigned long to double, save errors.
ul | The unsigned long value. | |
ok | Pointer to a variable to receive the error code. |
dk_long_long_unsigned_t dkma_ull_gcd | ( | dk_long_long_unsigned_t | l1, | |
dk_long_long_unsigned_t | l2 | |||
) |
Find greatest common divisor for two numbers.
l1 | First operand. | |
l2 | Second operand. |
dk_long_long_unsigned_t dkma_ull_lcm | ( | dk_long_long_unsigned_t | l1, | |
dk_long_long_unsigned_t | l2 | |||
) |
Calculate least common multiple of two numbers.
l1 | Operand 1. | |
l2 | Operand 2. |
dk_long_long_unsigned_t dkma_ull_lcm_ok | ( | dk_long_long_unsigned_t | l1, | |
dk_long_long_unsigned_t | l2, | |||
int * | ec | |||
) |
Calculate least common multiple of two numbers, check for out-of-range result.
l1 | Operand 1. | |
l2 | Operand 2. | |
ec | Pointer to variable to receive error code. |
double dkma_ull_to_double | ( | dk_long_long_unsigned_t | ul | ) |
Convert unsigned long to double.
ul | The unsigned long value. |
double dkma_ull_to_double_ok | ( | dk_long_long_unsigned_t | ul, | |
int * | ok | |||
) |
Convert unsigned long long to double, save errors.
ul | The unsigned long long value. | |
ok | Pointer to a variable to receive the error code. |