On Sun, 2009-05-24 at 14:33 +0100, Nathan Rixham wrote: > Afternoon all, > > This is a quick survey, think it would be useful to have the values of > MAX_FLOAT for each platform, and indeed see if it does differ. > > to do this can you please run the following code (bc* required) and > reply back with the output (and your platform / php version) > > code: > <?php > > function getMaxFloat() { > $value = '1'; > $multiplier = '1'; > while(1) { > $value = bcadd( $value , $multiplier ); > if( (float)$value == INF ) { > $value = $oldvalue; > $multiplier = '1'; > } elseif( ((float)bcadd( $value , '10' )) == INF ) { > while(1) { > $value = bcadd( $value , '1' ); > if( (float)$value == INF ) { > return $oldvalue; > } > $oldvalue = $value; > } > } > $oldvalue = $value; > $multiplier = bcmul( $multiplier , '10' ); > } > } > > define( 'FLOAT_MAX' , getMaxFloat() ); > > echo FLOAT_MAX . PHP_EOL; > > ?> > > my results: > > Win Vista 32 bit on Intel Quad Core Duo - PHP 5.2.8 > 179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497791 > > Thanks! Here's a faster version that takes a split second to evaluate: <?php function getMaxFloat() { $val1 = 2; $val2 = 2; for( ; ; ) { $val2 = bcmul( $val1, $val1, 0 ); if( (string)((float)$val2) === 'INF' ) { break; } $val1 = $val2; } for( ; ; ) { $val2 = bcadd( $val1, $val1, 0 ); if( (string)((float)$val2) === 'INF' ) { break; } $val1 = $val2; } $mod = bcdiv( $val1, 2, 0 ); for( ; ; ) { if( (float)$mod < 1 ) { break; } $val2 = bcadd( $val1, $mod, 0 ); if( (string)((float)$val2) === 'INF' ) { $mod = bcdiv( $mod, 2, 0 ); } else { $val1 = $val2; } } return $val1; } define( 'FLOAT_MAX' , getMaxFloat() ); echo FLOAT_MAX . PHP_EOL; ?> Also, when I tried using your INF comparison it always evaluated to false so I did conversions to string... it's strange though since the INF constant displayed "INF" when echoed and the (float)$val2 displayed INF when echoed (when it passed the available limits) but comparing them yielded false. Anyways: AMD Phenom(tm) 9850 Quad-Core Processor PHP 5.2.9 Ubuntu 8.04.2 (Hardy) 179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497791 This is a match to your results. Cheers, Rob. -- http://www.interjinn.com Application and Templating Framework for PHP -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php