This method is 10x faster, and more accurate (although the word is
meaningless at such scale due to the nature of IEEE floats):
private function safeBitCheck2(l : Number, r : Number) : Boolean
{
if (r l)
return false;
if (r == l)
return true;
if ((l = uint.MAX_VALUE) (r = uint.MAX_VALUE))
return (l r) == r;
var rs : String = r.toString(32);
var ls : String = l.toString(32).substring(-rs.length);
var split : uint = uint(rs.length) 1;
if (safeBitCheck2(parseInt(ls.substr(0, split), 32),
parseInt(rs.substr(0, split), 32)))
return safeBitCheck2(parseInt(ls.substr(split), 32),
parseInt(rs.substr(split), 32));
return false;
}
What on earth do you actually need this function for?
-Josh
2009/1/20 Rafael Faria rafaelfaria.gru...@gmail.com
Thanks Josh.
I kinda managed to get it working.
so for the records if someone else need it, it seems to work fine.
private function
safeBitCheck(num:Number,comparison:Number):Boolean
{
if(num 2147483647 ) {
return (num comparison)==comparison;
} else {
var binNumber:String = strrev(base_convert(num,10,2));
var binComparison:String =
strrev(base_convert(comparison,10,2));
for(var i:uint=0; ibinComparison.length; i++ ) {
if( binNumber.length i ||
(binComparison.charAt(i)===1
binNumber.charAt(i)===0) ) {
return false;
}
}
return true;
}
}
public function strrev(str:String):String {
return str.split().reverse().join();
}
public function base_convert(num:Number, frombase:Number,
tobase:Number):String {
return parseInt(num+'',
frombase+0).toString(tobase+0);
}
--- In flexcoders@yahoogroups.com, Josh McDonald dzn...@... wrote:
Does result = (uint(number) uint(comparison)) work?
-Josh
2009/1/20 Rafael Faria rafaelfaria.gru...@...
Please,
anyone with skills to convert the following php function to flex? i'm
killing myself trying...
please... anyone?
thanks
rafael
-
/**
* Perform a float-safe bitwise AND comparison
*
* @param int/float $number The number to which to perform a
bitwise AND
* @param int/float $comparison The number with which to perform a
bitwise AND
* @return bool
*/
function safeBitCheck($number,$comparison) {
if( $number 2147483647 ) {
return ($number $comparison)==$comparison;
} else {
$binNumber = strrev(base_convert($number,10,2));
$binComparison = strrev(base_convert($comparison,10,2));
for( $i=0; $istrlen($binComparison); $i++ ) {
if( strlen($binNumber)$i || ($binComparison{$i}===1
$binNumber{$i}===0) ) {
return false;
}
}
return true;
}
}
safeBitCheck(17,16); // true
safeBitCheck(17,2); // false
safeBitCheck((4294967296+8589934592),4294967296); // true
safeBitCheck(2,8589934592); // false
--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Alternative FAQ location:
https://share.acrobat.com/adc/document.do?docid=942dbdc8-e469-446f-b4cf-1e62079f6847
Search Archives:
http://www.mail-archive.com/flexcoders%40yahoogroups.comYahoo! Groups
Links
--
Therefore, send not to know For whom the bell tolls. It tolls for
thee.
Like the cut of my jib? Check out my Flex blog!
:: Josh 'G-Funk' McDonald
:: 0437 221 380 :: j...@...
:: http://flex.joshmcdonald.info/
:: http://twitter.com/sophistifunk
--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Alternative FAQ location:
https://share.acrobat.com/adc/document.do?docid=942dbdc8-e469-446f-b4cf-1e62079f6847
Search Archives:
http://www.mail-archive.com/flexcoders%40yahoogroups.comYahoo! Groups
Links
--
Therefore, send not to know For whom the bell tolls. It tolls for thee.
Like the cut of my jib? Check out my Flex blog!
:: Josh 'G-Funk' McDonald
:: 0437 221 380 :: j...@gfunk007.com
:: http://flex.joshmcdonald.info/
:: http://twitter.com/sophistifunk