All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
kzs_math.h File Reference

Math wrappers. More...

#include <system/kzs_types.h>
#include <system/debug/kzs_error.h>
#include <system/kzs_header.h>
#include <math.h>
#include <float.h>
#include <limits.h>
#include <stdlib.h>

Classes

union  KZ_FLOAT_UNION_TYPE
 Used for keeping strict aliasing when interpreting kzU32 as kzFloat. More...
 

Macros

#define KZS_PI
 Mathematical constant pi. More...
 
#define KZS_E
 Mathematical constant e. More...
 
#define KZS_LN_2
 Natural logarithm of 2. More...
 
#define KZ_FLOAT_MAXIMUM
 Largest value for a floating point number. More...
 
#define KZ_FLOAT_MINIMUM
 Most negative value for a floating point number. More...
 
#define KZ_FLOAT_SMALLEST_POSITIVE
 Smallest normalized value larger than positive zero. More...
 
#define KZ_FLOAT_EPSILON
 Smallest float such that 1.0f + KZ_FLOAT_EPSILON != 1.0f. More...
 
#define KZ_INT_MAXIMUM
 Largest value for integer. More...
 
#define KZ_INT_MINIMUM
 Smallest value for integer. More...
 
#define KZ_UINT_MAXIMUM
 Largest value for unsigned integer. More...
 
#define KZ_UINT_MINIMUM
 Smallest value for unsigned integer. More...
 
#define KZ_UINT32_MAXIMUM
 Largest value for 32-bit unsigned integer. More...
 
#define KZ_UINT32_MINIMUM
 Smallest value for 32-bit unsigned integer. More...
 
#define KZ_UINT64_MAXIMUM
 Largest value for 64-bit unsigned integer. More...
 
#define KZ_UINT64_MINIMUM
 Smallest value for 64-bit unsigned integer. More...
 
#define KZS_NAN
 Floating point value for Not a Number. More...
 
#define KZS_INFINITY
 Floating point value for positive infinity. More...
 

Functions

KZ_INLINE kzBool kzsIsNan (kzFloat x)
 Returns KZ_TRUE if x is NaN. More...
 
KZ_INLINE kzBool kzsIsPositiveInfinity (kzFloat x)
 Returns KZ_TRUE if x is positive infinity. More...
 
KZ_INLINE kzBool kzsIsNegativeInfinity (kzFloat x)
 Returns KZ_TRUE if x is negative infinity. More...
 
KZ_INLINE kzBool kzsIsInfinity (kzFloat x)
 Returns KZ_TRUE if x is an infinity. More...
 
KZ_INLINE kzBool kzsIsIEEENegativeInfinity (kzFloat x)
 Returns KZ_TRUE if x is the specific IEEE floating point negative infinity constant. More...
 
KZ_INLINE kzBool kzsIsIEEEPositiveInfinity (kzFloat x)
 Returns KZ_TRUE if x is the specific IEEE floating point positive infinity constant. More...
 
KZ_INLINE kzFloat kzsSinf (kzFloat angleInRadians)
 Returns sine of given angle. More...
 
KZ_INLINE kzFloat kzsCosf (kzFloat angleInRadians)
 Returns cosine of given angle. More...
 
KZ_INLINE kzFloat kzsAsinf (kzFloat x)
 Returns inverse sine from floating point number between -1 and 1. More...
 
KZ_INLINE kzFloat kzsAcosf (kzFloat x)
 Returns inverse cosine from floating point number between -1 and 1. More...
 
KZ_INLINE kzFloat kzsTanf (kzFloat angleInRadians)
 Returns tangent of given angle. More...
 
KZ_INLINE kzFloat kzsAtanf (kzFloat x)
 Returns atan from floating point number. More...
 
KZ_INLINE kzFloat kzsAtan2f (kzFloat y, kzFloat x)
 Returns atan2 from floating point number. More...
 
KZ_INLINE kzFloat kzsSqrtf (kzFloat value)
 Returns square root of given value. More...
 
KZ_INLINE kzFloat kzsSignf (kzFloat value)
 Returns the signum of given value. More...
 
KZ_INLINE kzFloat kzsFmod (kzFloat value, kzFloat divisor)
 Floating point remainder of value divided by divisor. More...
 
KZ_INLINE kzFloat kzsModf (kzFloat value, kzFloat *intPart)
 Breaks floating point number to integral and fractional part. More...
 
KZ_INLINE kzUint kzsRemainder (kzInt dividend, kzUint divisor)
 Returns modulo dividend % divisor for signed numbers in a way that negative numbers are treated as an extension instead of mirroring compared to positive numbers. More...
 
KZ_INLINE kzFloat kzsRemainderf (kzFloat dividend, kzFloat divisor)
 Same as kzsRemainder, but for floating point numbers. More...
 
KZ_INLINE kzFloat kzsPowf (kzFloat value, kzFloat exponent)
 Raises 'value' to the power of 'exponent'. More...
 
KZ_INLINE kzFloat kzsExpf (kzFloat value)
 Raises e (base of natural logarithm) to the power of 'value'. More...
 
KZ_INLINE kzFloat kzsLog10f (kzFloat value)
 Returns base 10 logarithm of given floating point value. More...
 
KZ_INLINE kzDouble kzsLogE (kzDouble value)
 Returns natural logarithm of given double value. More...
 
KZ_INLINE kzFloat kzsLogEf (kzFloat value)
 Returns natural logarithm of given floating point value. More...
 
KZ_INLINE kzFloat kzsFloorf (kzFloat value)
 Returns the largest integer not greater than value as float. More...
 
KZ_INLINE kzInt kzsIFloorf (kzFloat value)
 Returns the largest integer not greater than value as integer. More...
 
KZ_INLINE kzFloat kzsRoundf (kzFloat value)
 Returns the floating point value rounded as per normal rounding rules. More...
 
KZ_INLINE kzFloat kzsCeilf (kzFloat value)
 Returns the smallest integer no less than value in float. More...
 
KZ_INLINE kzInt kzsICeilf (kzFloat value)
 Returns the smallest integer no less than value in integer. More...
 
KZ_INLINE kzUint kzsAbs (kzInt value)
 Returns absolute value from integer value. More...
 
KZ_INLINE kzFloat kzsFabsf (kzFloat value)
 Returns absolute value from floating point number. More...
 
KZ_INLINE kzFloat kzsClampf (kzFloat value, kzFloat minimum, kzFloat maximum)
 Clamps float value to given range. More...
 
KZ_INLINE kzInt kzsClampi (kzInt value, kzInt minimum, kzInt maximum)
 Clamps integer value to given range. More...
 
KZ_INLINE kzUint kzsClampui (kzUint value, kzUint minimum, kzUint maximum)
 Clamps unsigned integer value to given range. More...
 
KZ_INLINE kzFloat kzsLerpf (kzFloat minimum, kzFloat maximum, kzFloat t)
 Linearly interpolate between [a,b] where t should be in range [0,1]. More...
 
KZ_INLINE kzFloat kzsDegreesToRadians (kzFloat angleInDegrees)
 Converts degrees to radians. More...
 
KZ_INLINE kzFloat kzsRadiansToDegrees (kzFloat angleInRadians)
 Converts radians to degrees. More...
 
KZ_INLINE kzBool kzsIsInClosedInterval (kzFloat value, kzFloat minimum, kzFloat maximum)
 Check whether value is in [min, max] (an interval inclusive of the limit points) More...
 
KZ_INLINE kzBool kzsFloatIsEqual (kzFloat valueA, kzFloat valueB)
 Check if two floats are equal. More...
 
KZ_INLINE kzBool kzsFloatIsAlmostEqualUlps (kzFloat valueA, kzFloat valueB, kzUint maxUlps)
 Check if two IEEE 754 binary32 floats are equal up to a given number of ulps. More...
 
KZ_INLINE kzBool kzsFloatIsAlmostEqualAbsolute (kzFloat valueA, kzFloat valueB, kzFloat maxAbsoluteDifference)
 Check if two floats are equal up to a given difference. More...
 
KZ_INLINE kzBool kzsFloatIsAlmostEqualRelative (kzFloat valueA, kzFloat valueB, kzFloat maxRelativeDifference)
 Check if two floats are equal up to a given difference scaled by the larger value. More...
 
KZ_INLINE kzBool kzsFloatIsAlmostEqual (kzFloat valueA, kzFloat valueB)
 Check if two floats are approximately equal. More...
 
KZ_INLINE kzBool kzsIsInOpenInterval (kzFloat value, kzFloat minimum, kzFloat maximum)
 Check whether value in (min, max) (an interval range exclusive of the limit points) More...
 
KZ_INLINE kzInt kzsMin (kzInt a, kzInt b)
 Returns the smaller of two integers. More...
 
KZ_INLINE kzInt kzsMax (kzInt a, kzInt b)
 Returns the greater of two integers. More...
 
KZ_INLINE kzUint kzsMinU (kzUint a, kzUint b)
 Returns the smaller of two unsigned integers. More...
 
KZ_INLINE kzUint kzsMaxU (kzUint a, kzUint b)
 Returns the greater of two unsigned integers. More...
 
KZ_INLINE kzFloat kzsMinf (kzFloat a, kzFloat b)
 Returns the smaller of two floats. More...
 
KZ_INLINE kzFloat kzsMaxf (kzFloat a, kzFloat b)
 Returns the greater of two floats. More...
 
KZ_INLINE kzInt kzsStep (kzInt a, kzInt b)
 Returns the step function of two integers. More...
 
KZ_INLINE kzUint kzsStepU (kzUint a, kzUint b)
 Returns the step function of two unsigned integers. More...
 
KZ_INLINE kzFloat kzsStepf (kzFloat a, kzFloat b)
 Returns the step function of two floats. More...
 
KZ_INLINE void kzsQsort (void *buffer, kzUint itemCount, kzUint itemSize, kzInt(*comparator)(const void *left, const void *right))
 Sorts values in buffer using quick sort. More...
 
KZ_INLINE kzUint kzsFloatToUint (kzFloat value)
 Casts a float to unsigned int. More...
 
KZ_INLINE kzFloat kzsUintToFloat (kzUint value)
 Casts an unsigned int to float. More...
 
KZ_INLINE kzInt kzsFloatRoundToInt (kzFloat value)
 Rounds a float to the nearest integer. More...
 
KZ_INLINE kzUint kzsFloatRoundToUint (kzFloat value)
 Rounds a float to the nearest unsigned integer. More...
 
KZ_INLINE void kzsSwap (void *element1, void *element2, kzUint elementSize)
 Swaps two arbitrary elements of arbitrary size. More...
 

Variables

KANZI_API const union
KZ_FLOAT_UNION_TYPE 
KZS_NAN_PRIVATE
 
KANZI_API const union
KZ_FLOAT_UNION_TYPE 
KZS_INFINITY_PRIVATE
 

Detailed Description

Math wrappers.

Copyright 2008-2020 by Rightware. All rights reserved.

Macro Definition Documentation

#define KZS_PI

Mathematical constant pi.

#define KZS_E

Mathematical constant e.

#define KZS_LN_2

Natural logarithm of 2.

#define KZ_FLOAT_MAXIMUM

Largest value for a floating point number.

#define KZ_FLOAT_MINIMUM

Most negative value for a floating point number.

#define KZ_FLOAT_SMALLEST_POSITIVE

Smallest normalized value larger than positive zero.

#define KZ_FLOAT_EPSILON

Smallest float such that 1.0f + KZ_FLOAT_EPSILON != 1.0f.

#define KZ_INT_MAXIMUM

Largest value for integer.

#define KZ_INT_MINIMUM

Smallest value for integer.

#define KZ_UINT_MAXIMUM

Largest value for unsigned integer.

#define KZ_UINT_MINIMUM

Smallest value for unsigned integer.

#define KZ_UINT32_MAXIMUM

Largest value for 32-bit unsigned integer.

#define KZ_UINT32_MINIMUM

Smallest value for 32-bit unsigned integer.

#define KZ_UINT64_MAXIMUM

Largest value for 64-bit unsigned integer.

#define KZ_UINT64_MINIMUM

Smallest value for 64-bit unsigned integer.

#define KZS_NAN

Floating point value for Not a Number.

#define KZS_INFINITY

Floating point value for positive infinity.

Negative infinity is -KZS_INFINITY.

Function Documentation

KZ_INLINE kzBool kzsIsNan ( kzFloat  x)

Returns KZ_TRUE if x is NaN.

KZ_INLINE kzBool kzsIsPositiveInfinity ( kzFloat  x)

Returns KZ_TRUE if x is positive infinity.

KZ_INLINE kzBool kzsIsNegativeInfinity ( kzFloat  x)

Returns KZ_TRUE if x is negative infinity.

KZ_INLINE kzBool kzsIsInfinity ( kzFloat  x)

Returns KZ_TRUE if x is an infinity.

KZ_INLINE kzBool kzsIsIEEENegativeInfinity ( kzFloat  x)

Returns KZ_TRUE if x is the specific IEEE floating point negative infinity constant.

KZ_INLINE kzBool kzsIsIEEEPositiveInfinity ( kzFloat  x)

Returns KZ_TRUE if x is the specific IEEE floating point positive infinity constant.

KZ_INLINE kzFloat kzsSinf ( kzFloat  angleInRadians)

Returns sine of given angle.

KZ_INLINE kzFloat kzsCosf ( kzFloat  angleInRadians)

Returns cosine of given angle.

KZ_INLINE kzFloat kzsAsinf ( kzFloat  x)

Returns inverse sine from floating point number between -1 and 1.

KZ_INLINE kzFloat kzsAcosf ( kzFloat  x)

Returns inverse cosine from floating point number between -1 and 1.

KZ_INLINE kzFloat kzsTanf ( kzFloat  angleInRadians)

Returns tangent of given angle.

KZ_INLINE kzFloat kzsAtanf ( kzFloat  x)

Returns atan from floating point number.

KZ_INLINE kzFloat kzsAtan2f ( kzFloat  y,
kzFloat  x 
)

Returns atan2 from floating point number.

KZ_INLINE kzFloat kzsSqrtf ( kzFloat  value)

Returns square root of given value.

KZ_INLINE kzFloat kzsSignf ( kzFloat  value)

Returns the signum of given value.

KZ_INLINE kzFloat kzsFmod ( kzFloat  value,
kzFloat  divisor 
)

Floating point remainder of value divided by divisor.

The result may be negative for negative values.

KZ_INLINE kzFloat kzsModf ( kzFloat  value,
kzFloat intPart 
)

Breaks floating point number to integral and fractional part.

Returns fractional part as return value and sets intPart to integral part.

KZ_INLINE kzUint kzsRemainder ( kzInt  dividend,
kzUint  divisor 
)

Returns modulo dividend % divisor for signed numbers in a way that negative numbers are treated as an extension instead of mirroring compared to positive numbers.

For example kzsRemainder(-16, 5) = 4

KZ_INLINE kzFloat kzsRemainderf ( kzFloat  dividend,
kzFloat  divisor 
)

Same as kzsRemainder, but for floating point numbers.

Results are undefined if divisor is not greater than zero.

KZ_INLINE kzFloat kzsPowf ( kzFloat  value,
kzFloat  exponent 
)

Raises 'value' to the power of 'exponent'.

KZ_INLINE kzFloat kzsExpf ( kzFloat  value)

Raises e (base of natural logarithm) to the power of 'value'.

KZ_INLINE kzFloat kzsLog10f ( kzFloat  value)

Returns base 10 logarithm of given floating point value.

KZ_INLINE kzDouble kzsLogE ( kzDouble  value)

Returns natural logarithm of given double value.

KZ_INLINE kzFloat kzsLogEf ( kzFloat  value)

Returns natural logarithm of given floating point value.

KZ_INLINE kzFloat kzsFloorf ( kzFloat  value)

Returns the largest integer not greater than value as float.

KZ_INLINE kzInt kzsIFloorf ( kzFloat  value)

Returns the largest integer not greater than value as integer.

KZ_INLINE kzFloat kzsRoundf ( kzFloat  value)

Returns the floating point value rounded as per normal rounding rules.

KZ_INLINE kzFloat kzsCeilf ( kzFloat  value)

Returns the smallest integer no less than value in float.

KZ_INLINE kzInt kzsICeilf ( kzFloat  value)

Returns the smallest integer no less than value in integer.

KZ_INLINE kzUint kzsAbs ( kzInt  value)

Returns absolute value from integer value.

KZ_INLINE kzFloat kzsFabsf ( kzFloat  value)

Returns absolute value from floating point number.

KZ_INLINE kzFloat kzsClampf ( kzFloat  value,
kzFloat  minimum,
kzFloat  maximum 
)

Clamps float value to given range.

KZ_INLINE kzInt kzsClampi ( kzInt  value,
kzInt  minimum,
kzInt  maximum 
)

Clamps integer value to given range.

KZ_INLINE kzUint kzsClampui ( kzUint  value,
kzUint  minimum,
kzUint  maximum 
)

Clamps unsigned integer value to given range.

KZ_INLINE kzFloat kzsLerpf ( kzFloat  minimum,
kzFloat  maximum,
kzFloat  t 
)

Linearly interpolate between [a,b] where t should be in range [0,1].

KZ_INLINE kzFloat kzsDegreesToRadians ( kzFloat  angleInDegrees)

Converts degrees to radians.

KZ_INLINE kzFloat kzsRadiansToDegrees ( kzFloat  angleInRadians)

Converts radians to degrees.

KZ_INLINE kzBool kzsIsInClosedInterval ( kzFloat  value,
kzFloat  minimum,
kzFloat  maximum 
)

Check whether value is in [min, max] (an interval inclusive of the limit points)

KZ_INLINE kzBool kzsFloatIsEqual ( kzFloat  valueA,
kzFloat  valueB 
)

Check if two floats are equal.

KZ_INLINE kzBool kzsFloatIsAlmostEqualUlps ( kzFloat  valueA,
kzFloat  valueB,
kzUint  maxUlps 
)

Check if two IEEE 754 binary32 floats are equal up to a given number of ulps.

KZ_INLINE kzBool kzsFloatIsAlmostEqualAbsolute ( kzFloat  valueA,
kzFloat  valueB,
kzFloat  maxAbsoluteDifference 
)

Check if two floats are equal up to a given difference.

KZ_INLINE kzBool kzsFloatIsAlmostEqualRelative ( kzFloat  valueA,
kzFloat  valueB,
kzFloat  maxRelativeDifference 
)

Check if two floats are equal up to a given difference scaled by the larger value.

KZ_INLINE kzBool kzsFloatIsAlmostEqual ( kzFloat  valueA,
kzFloat  valueB 
)

Check if two floats are approximately equal.

KZ_INLINE kzBool kzsIsInOpenInterval ( kzFloat  value,
kzFloat  minimum,
kzFloat  maximum 
)

Check whether value in (min, max) (an interval range exclusive of the limit points)

KZ_INLINE kzInt kzsMin ( kzInt  a,
kzInt  b 
)

Returns the smaller of two integers.

KZ_INLINE kzInt kzsMax ( kzInt  a,
kzInt  b 
)

Returns the greater of two integers.

KZ_INLINE kzUint kzsMinU ( kzUint  a,
kzUint  b 
)

Returns the smaller of two unsigned integers.

KZ_INLINE kzUint kzsMaxU ( kzUint  a,
kzUint  b 
)

Returns the greater of two unsigned integers.

KZ_INLINE kzFloat kzsMinf ( kzFloat  a,
kzFloat  b 
)

Returns the smaller of two floats.

KZ_INLINE kzFloat kzsMaxf ( kzFloat  a,
kzFloat  b 
)

Returns the greater of two floats.

KZ_INLINE kzInt kzsStep ( kzInt  a,
kzInt  b 
)

Returns the step function of two integers.

Returns
1 if b >= a, 0 otherwise.
KZ_INLINE kzUint kzsStepU ( kzUint  a,
kzUint  b 
)

Returns the step function of two unsigned integers.

Returns
1 if b >= a, 0 otherwise.
KZ_INLINE kzFloat kzsStepf ( kzFloat  a,
kzFloat  b 
)

Returns the step function of two floats.

Returns
1.0f if b >= a, 0.0f otherwise.
KZ_INLINE void kzsQsort ( void *  buffer,
kzUint  itemCount,
kzUint  itemSize,
kzInt(*)(const void *left, const void *right)  comparator 
)

Sorts values in buffer using quick sort.

KZ_INLINE kzUint kzsFloatToUint ( kzFloat  value)

Casts a float to unsigned int.

KZ_INLINE kzFloat kzsUintToFloat ( kzUint  value)

Casts an unsigned int to float.

KZ_INLINE kzInt kzsFloatRoundToInt ( kzFloat  value)

Rounds a float to the nearest integer.

KZ_INLINE kzUint kzsFloatRoundToUint ( kzFloat  value)

Rounds a float to the nearest unsigned integer.

KZ_INLINE void kzsSwap ( void *  element1,
void *  element2,
kzUint  elementSize 
)

Swaps two arbitrary elements of arbitrary size.

Variable Documentation

KANZI_API const union KZ_FLOAT_UNION_TYPE KZS_NAN_PRIVATE
See also
KZS_NAN
KANZI_API const union KZ_FLOAT_UNION_TYPE KZS_INFINITY_PRIVATE
See also
KZS_INFINITY