dkma.h File Reference

Mathematical operations. More...

#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.


Detailed Description

Mathematical operations.

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.


Function Documentation

double dkma_add_double ( double  d1,
double  d2 
)

Addition of 2 double values.

Parameters:
d1 Value 1.
d2 Value 2.
Returns:
The summary.

double dkma_add_double_ok ( double  d1,
double  d2,
int *  ok 
)

Addition of 2 double values.

Parameters:
d1 Value 1.
d2 Value 2.
ok Pointer to variable to receive the error code (if any).
Returns:
Summary.

long dkma_add_long ( long  l1,
long  l2 
)

Addition of 2 long values.

Parameters:
l1 Value 1.
l2 Value 2.
Returns:
Summary.

long dkma_add_long_ok ( long  l1,
long  l2,
int *  ok 
)

Addition of 2 long values.

Parameters:
l1 Value 1.
l2 Value 2.
ok Pointer to variable to receive the error code (if any).
Returns:
Summary.

Add 2 long long unsigned values.

Parameters:
o1 First value.
o2 Second value.
Returns:
Summary of o1 and o2.

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.

Parameters:
o1 First value.
o2 Second value.
ok Pointer to variable receiving error code if any.
Returns:
Summary of o1 and o2.

unsigned long dkma_add_ulong ( unsigned long  u1,
unsigned long  u2 
)

Addition of 2 unsigned long values.

Parameters:
u1 Value 1.
u2 Value 2.
Returns:
Summary.

unsigned long dkma_add_ulong_ok ( unsigned long  u1,
unsigned long  u2,
int *  ok 
)

Addition of 2 unsigned long values.

Parameters:
u1 Value 1.
u2 Value 2.
ok Pointer to variable to receive the error code (if any).
Returns:
Summary.

double dkma_atan2 ( double  y,
double  x 
)

Calculate atan2(x,y)=atan(y/x).

This is a fallback for systems having no atan2() function.

Parameters:
y Height of the point.
x Width of a point.
Returns:
Angle between x-axis an line from (0,0) to the point in radians.

double dkma_div_double ( double  d1,
double  d2 
)

Division of 2 double values.

Parameters:
d1 Dividend.
d2 Divisor.
Returns:
The division result.

double dkma_div_double_ok ( double  d1,
double  d2,
int *  ok 
)

Division of 2 double values.

Parameters:
d1 Value 1.
d2 Value 2.
ok Pointer to variable to receive the error code (if any).
Returns:
Result.

long dkma_div_long ( long  l1,
long  l2 
)

Division of 2 long values.

Parameters:
l1 Value 1.
l2 Value 2.
Returns:
Result.

long dkma_div_long_ok ( long  l1,
long  l2,
int *  ok 
)

Division of 2 long values.

Parameters:
l1 Value 1.
l2 Value 2.
ok Pointer to variable to receive the error code (if any).
Returns:
Result.

Divide 2 long long unsigned values.

Parameters:
o1 First value.
o2 Second value.
Returns:
Fraction of o1 and o2.

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.

Parameters:
o1 First value.
o2 Second value.
ok Pointer to variable receiving error code if any.
Returns:
Fraction of o1 and o2.

unsigned long dkma_div_ulong ( unsigned long  u1,
unsigned long  u2 
)

Division of 2 unsigned long values.

Parameters:
u1 Value 1.
u2 Value 2.
Returns:
Result.

unsigned long dkma_div_ulong_ok ( unsigned long  u1,
unsigned long  u2,
int *  ok 
)

Division of 2 unsigned long values.

Parameters:
u1 Value 1.
u2 Value 2.
ok Pointer to variable to receive the error code (if any).
Returns:
Result.

double dkma_double_restrict_digits ( double  x,
unsigned  d 
)

Restrict number of digits after decimal dot.

Parameters:
x Original value.
d Number of digits after decimal dot.
Returns:
The result.

double dkma_double_restrict_downwards ( double  x,
unsigned  d 
)

Restrict number of digits after decimal dot, enforce downward rounding.

Parameters:
x Original value.
d Number of digits after decimal dot.
Returns:
The result.

long dkma_double_to_l ( double  d  ) 

Convert double to long.

Parameters:
d The double value.
Returns:
The conversion result.

long dkma_double_to_l_ok ( double  d,
int *  ok 
)

Convert double to long, save range overflow errors.

Parameters:
d The double value.
ok Pointer to a variable to receive the error code.
Returns:
The conversion result.

unsigned long dkma_double_to_ul ( double  d  ) 

Convert double to unsigned long.

Parameters:
d The double value.
Returns:
The conversion result.

unsigned long dkma_double_to_ul_ok ( double  d,
int *  ok 
)

Convert double to unsigned long, save range overflow errors.

Parameters:
d The double value.
ok Pointer to variable to receive the error code.
Returns:
The conversion result.

void dkma_fputs_double_no_exp ( FILE *  f,
double  d 
)

Print double to file, avoid exponential notation.

Parameters:
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.

Parameters:
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.

Parameters:
r Flag to indicate whether or not to reset the module-internal variable.
Returns:
The error code of the last error occured.

long dkma_l_gcd ( long  l1,
long  l2 
)

Find greatest common divisor for two numbers.

Parameters:
l1 First operand.
l2 Second operand.
Returns:
Greatest common divisor.

long dkma_l_lcm ( long  l1,
long  l2 
)

Calculate least common multiple of two numbers.

Parameters:
l1 Operand 1.
l2 Operand 2.
Returns:
Least common multiple.

long dkma_l_lcm_ok ( long  l1,
long  l2,
int *  ec 
)

Calculate least common multiple of two numbers, check for out-of-range result.

Parameters:
l1 Operand 1.
l2 Operand 2.
ec Pointer to variable to receive error code.
Returns:
Least common multiple.

double dkma_l_to_double ( long  l  ) 

Convert long to double.

Parameters:
l The long value.
Returns:
The conversion result.

double dkma_l_to_double_ok ( long  l,
int *  ok 
)

Convert long to double, save errors.

Parameters:
l The long value.
ok Pointer to a variable to receive the error code.
Returns:
The conversion result.

double dkma_mul_double ( double  d1,
double  d2 
)

Multiplication of 2 double values.

Parameters:
d1 Factor 1.
d2 Factor 2.
Returns:
The product.

double dkma_mul_double_ok ( double  d1,
double  d2,
int *  ok 
)

Multiplication of 2 double values.

Parameters:
d1 Value 1.
d2 Value 2.
ok Pointer to variable to receive the error code (if any).
Returns:
Product.

long dkma_mul_long ( long  l1,
long  l2 
)

Multiplication of 2 long values.

Parameters:
l1 Value 1.
l2 Value 2.
Returns:
Product.

long dkma_mul_long_ok ( long  l1,
long  l2,
int *  ok 
)

Multiplication of 2 long values.

Parameters:
l1 Value 1.
l2 Value 2.
ok Pointer to variable to receive the error code (if any).
Returns:
Product.

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.

Parameters:
o1 First value.
o2 Second value.
ok Pointer to variable receiving error code if any.
Returns:
Product of o1 and o2.

unsigned long dkma_mul_ulong ( unsigned long  u1,
unsigned long  u2 
)

Multiplication of 2 unsigned long values.

Parameters:
u1 Value 1.
u2 Value 2.
Returns:
Product.

unsigned long dkma_mul_ulong_ok ( unsigned long  u1,
unsigned long  u2,
int *  ok 
)

Multiplication of 2 unsigned long values.

Parameters:
u1 Value 1.
u2 Value 2.
ok Pointer to variable to receive the error code (if any).
Returns:
Product.

Multiplicate 2 long long unsigned values.

Parameters:
o1 First value.
o2 Second value.
Returns:
Product of o1 and o2.

double dkma_rint ( double  d  ) 

Round to nearest integer.

This is a fallback function for systems having no rint() function.

Parameters:
d Original number.
Returns:
Number rounded to nearest integer.

double dkma_sub_double ( double  d1,
double  d2 
)

Substraction of 2 double values.

Parameters:
d1 Value 1.
d2 Value 2.
Returns:
The difference.

double dkma_sub_double_ok ( double  d1,
double  d2,
int *  ok 
)

Subtraction of 2 double values.

Parameters:
d1 Value 1.
d2 Value 2.
ok Pointer to variable to receive the error code (if any).
Returns:
Difference.

long dkma_sub_long ( long  l1,
long  l2 
)

Subtraction of 2 long values.

Parameters:
l1 Value 1.
l2 Value 2.
Returns:
Difference.

long dkma_sub_long_ok ( long  l1,
long  l2,
int *  ok 
)

Subtraction of 2 long values.

Parameters:
l1 Value 1.
l2 Value 2.
ok Pointer to variable to receive the error code (if any).
Returns:
Difference.

Substract 2 long long unsigned values.

Parameters:
o1 First value.
o2 Second value.
Returns:
Difference of o1 and o2.

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.

Parameters:
o1 First value.
o2 Second value.
ok Pointer to variable receiving error code if any.
Returns:
Difference of o1 and o2.

unsigned long dkma_sub_ulong ( unsigned long  u1,
unsigned long  u2 
)

Subtraction of 2 unsigned long values.

Parameters:
u1 Value 1.
u2 Value 2.
Returns:
Difference.

unsigned long dkma_sub_ulong_ok ( unsigned long  u1,
unsigned long  u2,
int *  ok 
)

Subtraction of 2 unsigned long values.

Parameters:
u1 Value 1.
u2 Value 2.
ok Pointer to variable to receive the error code (if any).
Returns:
Difference.

unsigned long dkma_ul_gcd ( unsigned long  l1,
unsigned long  l2 
)

Find greatest common divisor for two numbers.

Parameters:
l1 First operand.
l2 Second operand.
Returns:
Greatest common divisor.

unsigned long dkma_ul_lcm ( unsigned long  l1,
unsigned long  l2 
)

Calculate least common multiple of two numbers.

Parameters:
l1 Operand 1.
l2 Operand 2.
Returns:
Least common multiple.

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.

Parameters:
l1 Operand 1.
l2 Operand 2.
ec Pointer to variable to receive error code.
Returns:
Least common multiple.

double dkma_ul_to_double_ok ( unsigned long  ul,
int *  ok 
)

Convert unsigned long to double, save errors.

Parameters:
ul The unsigned long value.
ok Pointer to a variable to receive the error code.
Returns:
The conversion result.

Find greatest common divisor for two numbers.

Parameters:
l1 First operand.
l2 Second operand.
Returns:
Greatest common divisor.

Calculate least common multiple of two numbers.

Parameters:
l1 Operand 1.
l2 Operand 2.
Returns:
Least common multiple.

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.

Parameters:
l1 Operand 1.
l2 Operand 2.
ec Pointer to variable to receive error code.
Returns:
Least common multiple.

double dkma_ull_to_double ( dk_long_long_unsigned_t  ul  ) 

Convert unsigned long to double.

Parameters:
ul The unsigned long value.
Returns:
The conversion result.

double dkma_ull_to_double_ok ( dk_long_long_unsigned_t  ul,
int *  ok 
)

Convert unsigned long long to double, save errors.

Parameters:
ul The unsigned long long value.
ok Pointer to a variable to receive the error code.
Returns:
The conversion result.


Generated on Mon Jan 4 15:50:56 2010 for dklibs by  doxygen 1.5.8