mirror of
https://github.com/samba-team/samba.git
synced 2025-08-04 08:22:08 +03:00
replace modf so we don't need the math library
This commit is contained in:
@ -71,7 +71,6 @@
|
|||||||
#endif
|
#endif
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <math.h>
|
|
||||||
#ifdef HAVE_STDLIB_H
|
#ifdef HAVE_STDLIB_H
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#endif
|
#endif
|
||||||
@ -551,6 +550,42 @@ static LLONG ROUND(LDOUBLE value)
|
|||||||
return intpart;
|
return intpart;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* a replacement for modf that doesn't need the math library. Should
|
||||||
|
be portable, but slow */
|
||||||
|
static double my_modf(double x0, double *iptr)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
long l;
|
||||||
|
double x = x0;
|
||||||
|
double f = 1.0;
|
||||||
|
|
||||||
|
for (i=0;i<100;i++) {
|
||||||
|
l = (long)x;
|
||||||
|
if (l <= (x+1) && l >= (x-1)) break;
|
||||||
|
x *= 0.1;
|
||||||
|
f *= 10.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i == 100) {
|
||||||
|
/* yikes! the number is beyond what we can handle. What do we do? */
|
||||||
|
(*iptr) = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i != 0) {
|
||||||
|
double i2;
|
||||||
|
double ret;
|
||||||
|
|
||||||
|
ret = my_modf(x0-l*f, &i2);
|
||||||
|
(*iptr) = l*f + i2;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
(*iptr) = l;
|
||||||
|
return x - (*iptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
|
static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
|
||||||
LDOUBLE fvalue, int min, int max, int flags)
|
LDOUBLE fvalue, int min, int max, int flags)
|
||||||
{
|
{
|
||||||
@ -608,7 +643,7 @@ static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
temp = ufvalue;
|
temp = ufvalue;
|
||||||
modf(temp, &intpart);
|
my_modf(temp, &intpart);
|
||||||
|
|
||||||
fracpart = ROUND((POW10(max)) * (ufvalue - intpart));
|
fracpart = ROUND((POW10(max)) * (ufvalue - intpart));
|
||||||
|
|
||||||
@ -621,7 +656,7 @@ static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
|
|||||||
/* Convert integer part */
|
/* Convert integer part */
|
||||||
do {
|
do {
|
||||||
temp = intpart;
|
temp = intpart;
|
||||||
modf (intpart*0.1, &intpart);
|
my_modf(intpart*0.1, &intpart);
|
||||||
temp = temp*0.1;
|
temp = temp*0.1;
|
||||||
index = (int) ((temp -intpart +0.05)* 10.0);
|
index = (int) ((temp -intpart +0.05)* 10.0);
|
||||||
/* index = (int) (((double)(temp*0.1) -intpart +0.05) *10.0); */
|
/* index = (int) (((double)(temp*0.1) -intpart +0.05) *10.0); */
|
||||||
@ -637,7 +672,7 @@ static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
|
|||||||
{
|
{
|
||||||
do {
|
do {
|
||||||
temp = fracpart;
|
temp = fracpart;
|
||||||
modf (fracpart*0.1, &fracpart);
|
my_modf(fracpart*0.1, &fracpart);
|
||||||
temp = temp*0.1;
|
temp = temp*0.1;
|
||||||
index = (int) ((temp -fracpart +0.05)* 10.0);
|
index = (int) ((temp -fracpart +0.05)* 10.0);
|
||||||
/* index = (int) ((((temp/10) -fracpart) +0.05) *10); */
|
/* index = (int) ((((temp/10) -fracpart) +0.05) *10); */
|
||||||
|
Reference in New Issue
Block a user