/** @file dk3ma.h Mathematical operations. This module contains functions to perform arithmetic operations on long/unsigned long, long long/unsigned long long and intmax_t/uintmax_t operands and on dk3_im_t/dk3_um_t operands. When using plain operators +, -, *, / on integer operands, range overflow can occur silently. A division by 0 is a terminal error (program abort) on most systems. The functions in this module can be used to avoid division by zero and to detect overflows. An error code variable is set on errors. For double operands, don't use the dk3ma_d_add_ok(), dk3ma_d_sub_ok(), dk3ma_d_mul_ok() or dk3ma_d_div_ok() functions in new programs. They are still in the module for backward compatibility. The definition of the double type contains special values to express inifinity or not-a-number. A division by zero for double values does not terminate the program, it simply results in one of the special values. So you can do double arithmetic straightforward, finally use the isfinite() function to check whether the result is a valid number. On modern system you can use the floating point environment functions from fenv.h to obtain more detailed error information. The module also contains conversion routines between the numeric types. */