Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: fast normalization

Author: Francesco Di Tolla

Date: 02:57:06 11/01/03

Go up one level in this thread



>Assume the "numbers" in question are unsigned and fall in the range 0 to 255 as
>an example. Now what we want to do is to map the numbers onto 0 to 100:
>
>      find largest
>      k = (100<<17)/largest
>      foreach number
>         number = (number*k)>>17
>
>Where this might fail is if the original range is very much larger than 0 to
>255, so that the last statement would either create an overflow problem or an
>inaccurate result depending on the selected shift value. This can be remedied by
>resorting to 64 bit arithmetic, but I find that inelegant.
>
>With a little tweaking the above should be able to be made exactly equivalent to
>the OP's original algorithm, though perhaps the OP may find that is not
>necessary.

I don't get the point of using shifts:

      find largest
      double k = 100.0/largest
      foreach number
         number = some_function(number*k)

where you decide if you want somefunction to be round, ceil or floor or no
function which means simply cast to int.




This page took 0 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.