Go to the documentation of this file.
21 #ifndef GNASH_NUMERIC_H
22 #define GNASH_NUMERIC_H
37 #include <type_traits>
44 static const double PI = 3.14159265358979323846;
49 #if defined(HAVE_FINITE) && !defined(HAVE_ISFINITE)
64 static_assert(std::is_floating_point<T>::value,
65 "isNaN() is only meaningful for floating point types.");
80 return std::max<T>(min, std::min<T>(
i, max));
87 return (
b -
a) *
f +
a;
93 return static_cast<int>(
f + 0.5f);
102 template<
size_t Factor>
113 const double factor =
static_cast<double>(Factor);
122 static const double upperUnsignedLimit =
123 std::numeric_limits<std::uint32_t>::max() + 1.0;
124 static const double upperSignedLimit =
125 std::numeric_limits<std::int32_t>::max() / factor;
126 static const double lowerSignedLimit =
127 std::numeric_limits<std::int32_t>::min() / factor;
129 if (
a >= lowerSignedLimit &&
a <= upperSignedLimit) {
135 static_cast<std::uint32_t
>(
136 std::fmod(
a * factor, upperUnsignedLimit))
138 -
static_cast<std::uint32_t
>(
139 std::fmod(-
a * factor, upperUnsignedLimit));
146 return truncateWithFactor<20>(
a);
bool isNaN(const T &num)
Definition: GnashNumeric.h:62
@ d
Definition: GnashKey.h:150
@ T
Definition: GnashKey.h:132
@ i
Definition: GnashKey.h:155
std::int32_t pixelsToTwips(double a)
Definition: GnashNumeric.h:144
Anonymous namespace for callbacks, local functions, event handlers etc.
Definition: dbus_ext.cpp:41
int frnd(float f)
Definition: GnashNumeric.h:91
double twipsToPixels(int i)
Definition: GnashNumeric.h:97
std::int32_t truncateWithFactor(double a)
Definition: GnashNumeric.h:104
double infinite_to_zero(double x)
Definition: GnashNumeric.h:70
bool isFinite(double d)
Definition: GnashNumeric.h:47
T lerp(T a, T b, T f)
Definition: GnashNumeric.h:85
@ a
Definition: GnashKey.h:147
T clamp(T i, T min, T max)
Definition: GnashNumeric.h:77
@ f
Definition: GnashKey.h:152
std::int32_t x
Definition: BitmapData_as.cpp:434
@ b
Definition: GnashKey.h:148