/* Copyright (C) 2014-2020, Dirk Krause SPDX-License-Identifier: BSD-3-Clause */ /* WARNING: This file was generated by the dkct program (see http://dktools.sourceforge.net/ for details). Changes you make here will be lost if dkct is run again! You should modify the original source and run dkct on it. Original source: dk3mad.ctr */ #ifndef DK3MAD_H_INCLUDED /** Avoid multiple inclusions. */ #define DK3MAD_H_INCLUDED 1 #line 10 "dk3mad.ctr" /** @file dk3mad.h Mathematical operations on double numbers. Note: You should not use dk3ma_d_add_ok(), dk3ma_d_sub_ok(), dk3ma_d_mul_ok(), dk3ma_d_div_ok() and dk3ma_d_div_ok() for new programs. Perform the calculations traditionally and use the functions from the dk3mafpe module to check for floating point exceptions. */ #include #include #if DK3_HAVE_SYS_TYPES_H #include #endif #if DK3_HAVE_STDINT #include #endif #if DK3_HAVE_INTTYPES_H #include #endif #if DK3_HAVE_LIMITS_H #include #endif #if DK3_HAVE_MATH_H #include #endif #if DK3_HAVE_FLOAT_H #include #endif #ifdef __cplusplus extern "C" { #endif /** Absolute value. @param x Original value. @return Absolute value of x. */ double dk3ma_d_abs(double x); /** Rounding to next integer. @param x Double value. @return Value rounded to nearest integer. */ double dk3ma_d_rint(double x); /** Addition. @param a Left operand. @param b Right operand. @param ec Pointer to error code variable, may be NULL. The variable may be set to DK3_ERROR_MATH_OVERFLOW when returning. @return Summary of a and b. */ double dk3ma_d_add_ok(double a, double b, int *ec); /** Substraction. @param a Left operand. @param b Right operand. @param ec Pointer to error code variable, may be NULL. The variable may be set to DK3_ERROR_MATH_OVERFLOW when returning. @return Difference of a and b. */ double dk3ma_d_sub_ok(double a, double b, int *ec); /** Multiplication. @param a Left operand. @param b Right operand. @param ec Pointer to error code variable, may be NULL. The variable may be set to DK3_ERROR_MATH_OVERFLOW when returning. @return Product of a and b. */ double dk3ma_d_mul_ok(double a, double b, int *ec); /** Division. @param a Left operand (nominator). @param b Right operand (denominator). @param ec Pointer to error code variable, may be NULL. The variable may be set to DK3_ERROR_MATH_OVERFLOW or DK3_ERROR_MATH_DIVZERO when returning. @return Fraction of a and b. */ double dk3ma_d_div_ok(double a, double b, int *ec); /** Square root. @param x Original value. @param ec Pointer to error code variable, may be NULL. The variable may be set to DK3_ERROR_MATH_OUT_OF_RANGE if the input is negative. @return Square root of x. */ double dk3ma_d_square_ok(double x, int *ec); /** Equality check. @param a Left operand. @param b Right operand. @param epsilon Maximum allowed difference between a and b. @return 1 for equal values, 0 for unequal values. */ int dk3ma_d_equal(double a, double b, double epsilon); /** Arcus tangens for two lengths. @param y Y length (height). @param x X length (width). @return Angle alpha for y/x = tan(alpha). */ double dk3ma_d_atan2(double y, double x); /** Restrict number of digits following the decimal dot. @param x Original value. @param n Number of digits after decimal dot. @return Rounded result. */ double dk3ma_d_restrict_digits(double x, size_t n); /** Restrict number of digits following the decimal dot, round downwards. @param x Original value. @param n Number of digits after decimal dot. @return Rounded result. */ double dk3ma_d_restrict_digits_floor(double x, size_t n); /** Restrict number of digits following the decimal dot, round upwards. @param x Original value. @param n Number of digits after decimal dot. @return Rounded result. */ double dk3ma_d_restrict_digits_ceil(double x, size_t n); #ifdef __cplusplus } #endif #endif