# dark-hammer / include / core / std-math.h

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137``` ```/*********************************************************************************** * Copyright (c) 2012, Sepehr Taghdisian * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * ***********************************************************************************/ #ifndef __STDMATH_H__ #define __STDMATH_H__ #include #include "types.h" #include "core-api.h" #include "numeric.h" #ifdef __cplusplus extern "C" { #endif /** * @defgroup stdmath Std-math: math */ /** * check if float value is NAN * @ingroup stdmath */ INLINE bool_t math_isnan(fl32 n) { return (n != n); } /** * round float value to it's closest value * @ingroup stdmath */ INLINE fl32 math_round(fl32 n) { return (n > 0.0f) ? floorf(n + 0.5f) : ceilf(n - 0.5f); } /** * checks equality of two floating-point values with a tolerance * @ingroup stdmath */ INLINE bool_t math_isequal(fl32 a, fl32 b) { if (fabs(a-b) < EPSILON) return TRUE; fl32 err = 0.0f; if (fabsf(b) > fabsf(a)) err = fabsf((a-b)/b); else err = fabsf((a-b)/a); return (err < EPSILON); } /** * checks if floating-point value is zero * @ingroup stdmath */ INLINE bool_t math_iszero(fl32 n) { return fabs(n) < EPSILON; } /** * converts radians to degrees * @ingroup stdmath */ INLINE fl32 math_todeg(fl32 rad) { return 180.0f * rad / PI; } /* * converts degrees to radians * @ingroup stdmath */ INLINE fl32 math_torad(fl32 deg) { return deg * PI / 180.0f; } /** * returns the sign of float value * @return 1.0 if 'n' is positive, -1.0 if 'n' is negative and 0 if 'n' is zero * @ingroup stdmath */ INLINE fl32 math_sign(fl32 n) { if (n > EPSILON) return 1.0f; else if (n < -EPSILON) return -1.0f; else return 0.0f; } /** * Encodes 32bit float value to uint16 * @ingroup stdmath */ CORE_API uint16 math_ftou16(fl32 n); /** * Decodes uint16 value to 32bit floating point value * @ingroup stdmath */ CORE_API fl32 math_u16tof(uint16 n); /** * Safe ACos * @return PI if x is less than -1.0f, 0.0f if x is more than 1.0f, and acos(x) if x is within range */ INLINE fl32 math_acosf(fl32 x) { if (x <= -1.0f) return PI; if (x >= 1.0f) return 0.0f; return acosf(x); } #ifdef __cplusplus } #endif #endif ```
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.