BLI_math: add simple helper to get amount of 'integer' digits in a float number.

This commit is contained in:
Bastien Montagne 2017-08-01 16:34:02 +02:00
parent 702e9c556f
commit c1e177ad29
2 changed files with 18 additions and 0 deletions

View File

@ -138,6 +138,9 @@ MINLINE int signum_i(float a);
MINLINE float power_of_2(float f);
MINLINE int integer_digits_f(const float f);
MINLINE int integer_digits_d(const double d);
/* these don't really fit anywhere but were being copied about a lot */
MINLINE int is_power_of_2_i(int n);
MINLINE int power_of_2_max_i(int n);

View File

@ -314,6 +314,21 @@ MINLINE int signum_i(float a)
else return 0;
}
/** Returns number of (base ten) *significant* digits of integer part of given float
* (negative in case of decimal-only floats, 0.01 returns -1 e.g.). */
MINLINE int integer_digits_f(const float f)
{
return (f == 0.0f) ? 0 : (int)floor(log10(fabs(f))) + 1;
}
/** Returns number of (base ten) *significant* digits of integer part of given double
* (negative in case of decimal-only floats, 0.01 returns -1 e.g.). */
MINLINE int integer_digits_d(const double d)
{
return (d == 0.0) ? 0 : (int)floor(log10(fabs(d))) + 1;
}
/* Internal helpers for SSE2 implementation.
*
* NOTE: Are to be called ONLY from inside `#ifdef __SSE2__` !!!