1 /* 2 +----------------------------------------------------------------------+ 3 | Zend Engine | 4 +----------------------------------------------------------------------+ 5 | Copyright (c) Zend Technologies Ltd. (http://www.zend.com) | 6 +----------------------------------------------------------------------+ 7 | This source file is subject to version 2.00 of the Zend license, | 8 | that is bundled with this package in the file LICENSE, and is | 9 | available through the world-wide-web at the following url: | 10 | http://www.zend.com/license/2_00.txt. | 11 | If you did not receive a copy of the Zend license and are unable to | 12 | obtain it through the world-wide-web, please send a note to | 13 | license@zend.com so we can mail you a copy immediately. | 14 +----------------------------------------------------------------------+ 15 | Authors: Derick Rethans <derick@php.net> | 16 +----------------------------------------------------------------------+ 17 */ 18 19 /* This is a header file for the strtod implementation by David M. Gay which 20 * can be found in zend_strtod.c */ 21 #ifndef ZEND_STRTOD_H 22 #define ZEND_STRTOD_H 23 #include <zend.h> 24 25 BEGIN_EXTERN_C() 26 #define ZEND_STRTOD_K_MAX 7 27 typedef struct _zend_strtod_bigint zend_strtod_bigint; 28 typedef struct _zend_strtod_state { 29 zend_strtod_bigint *freelist[ZEND_STRTOD_K_MAX+1]; 30 zend_strtod_bigint *p5s; 31 char *result; 32 } zend_strtod_state; 33 ZEND_API void zend_freedtoa(char *s); 34 ZEND_API char *zend_dtoa(double _d, int mode, int ndigits, int *decpt, bool *sign, char **rve); 35 ZEND_API char *zend_gcvt(double value, int ndigit, char dec_point, char exponent, char *buf); 36 ZEND_API double zend_strtod(const char *s00, const char **se); 37 ZEND_API double zend_hex_strtod(const char *str, const char **endptr); 38 ZEND_API double zend_oct_strtod(const char *str, const char **endptr); 39 ZEND_API double zend_bin_strtod(const char *str, const char **endptr); 40 ZEND_API int zend_shutdown_strtod(void); 41 END_EXTERN_C() 42 43 /* double limits */ 44 #include <float.h> 45 #if defined(DBL_MANT_DIG) && defined(DBL_MIN_EXP) 46 #define ZEND_DOUBLE_MAX_LENGTH (3 + DBL_MANT_DIG - DBL_MIN_EXP) 47 #else 48 #define ZEND_DOUBLE_MAX_LENGTH 1080 49 #endif 50 51 #endif 52