|  | Posted by Andy Hassall on 02/14/06 00:07 
On Mon, 13 Feb 2006 22:24:45 +0100, "Janwillem Borleffs" <jw@jwscripts.com>wrote:
 
 >Andy Hassall wrote:
 >> On 5.1.2 it does output 0.23.
 >
 >Not on my WinXP installation, which produces 0.22
 >
 >One of the related bug reports (http://bugs.php.net/bug.php?id=35986)
 >mentions that this isn't a bug, but due to the limited precision of floats.
 >Perhaps it's processor related...
 
 Hum, 0.23 on Linux, 0.22 on Windows 2000. Both are Intel chips. Looks like
 there's Windows-specific code in ext/standard/round.c :
 
 #ifndef PHP_ROUND_FUZZ
 # ifndef PHP_WIN32
 #  define PHP_ROUND_FUZZ 0.50000000001
 # else
 #  define PHP_ROUND_FUZZ 0.5
 # endif
 #endif
 
 #define PHP_ROUND_WITH_FUZZ(val, places) {			\
 double tmp_val=val, f = pow(10.0, (double) places);	\
 tmp_val *= f;					\
 if (tmp_val >= 0.0) {				\
 tmp_val = floor(tmp_val + PHP_ROUND_FUZZ);	\
 } else {					\
 tmp_val = ceil(tmp_val - PHP_ROUND_FUZZ);	\
 }						\
 tmp_val /= f;					\
 val = !zend_isnan(tmp_val) ? tmp_val : val;	\
 }							\
 
 
 Shame there's no comments explaining what this is there for.
 
 --
 Andy Hassall :: andy@andyh.co.uk :: http://www.andyh.co.uk
 http://www.andyhsoftware.co.uk/space :: disk and FTP usage analysis tool
  Navigation: [Reply to this message] |