lucene-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Yonik Seeley (JIRA)" <j...@apache.org>
Subject [jira] Commented: (LUCENE-467) Use Float.floatToRawIntBits over Float.floatToIntBits
Date Thu, 17 Nov 2005 19:44:45 GMT
    [ http://issues.apache.org/jira/browse/LUCENE-467?page=comments#action_12357920 ] 

Yonik Seeley commented on LUCENE-467:
-------------------------------------

> How fast can you make: public byte floatToByte(float f, int numMantissaBits);

With Java5 and -server -Xbatch, just  as fast as the specialized version!  That server JVM
is amazing!
With Java5 -client,  it's 60% slower though...
Still this code might be good to keep around for double checking implementations.

   public static byte floatToByte(float f, int numMantissaBits) {
     int rshift = 24-numMantissaBits;   // 21 in old func
     int maxexp = 0xff >> numMantissaBits; // 31 in old func
     int zeroexp = 0xff >> (numMantissaBits+1); // 15 in old func
     // int overflowexp = 0x100 >> numMantissaBits; // 32 in old func
     int overflowexp = maxexp+1;
     int bits = Float.floatToRawIntBits(f);
     int smallfloat = bits >> rshift;
     if (smallfloat < (63-zeroexp)<<numMantissaBits) {
       return (bits<=0) ? (byte)0 : (byte)1;  // 0 or underflow
     } else if (smallfloat >= (63-zeroexp+overflowexp)<<numMantissaBits) {
       return -1;
     } else {
       return (byte)(smallfloat - ((63-zeroexp)<<numMantissaBits));
     }
   }

   public byte floatToByte(float f) {
    return floatToByte(f,3);
   }


> Use Float.floatToRawIntBits over Float.floatToIntBits
> -----------------------------------------------------
>
>          Key: LUCENE-467
>          URL: http://issues.apache.org/jira/browse/LUCENE-467
>      Project: Lucene - Java
>         Type: Improvement
>   Components: Other
>     Versions: 1.9
>     Reporter: Yonik Seeley
>     Priority: Minor

>
> Copied From my Email:
>   Float.floatToRawIntBits (in Java1.4) gives the raw float bits without
> normalization (like *(int*)&floatvar would in C).  Since it doesn't do
> normalization of NaN values, it's faster (and hopefully optimized to a
> simple inline machine instruction by the JVM).
> On my Pentium4, using floatToRawIntBits is over 5 times as fast as
> floatToIntBits.
> That can really add up in something like Similarity.floatToByte() for
> encoding norms, especially if used as a way to compress an array of
> float during query time as suggested by Doug.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-dev-help@lucene.apache.org


Mime
View raw message