octave-bug-tracker
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Octave-bug-tracker] [bug #54567] median(uint8) gives bad results


From: Dan Sebald
Subject: [Octave-bug-tracker] [bug #54567] median(uint8) gives bad results
Date: Sun, 26 Aug 2018 00:45:47 -0400 (EDT)
User-agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0

Follow-up Comment #9, bug #54567 (project octave):

That's fine with me.

On the matter of two numbers, for what it is worth, it seems the floating
point conversion (then sum, then divide) is the fastest.  Consider


octave:34> x = uint8(255*ones(100000,1));
octave:35> y = uint8(254*ones(100000,1));
octave:36> tic; zfloat = mean([x y], 2, "native"); toc
Elapsed time is 0.00436807 seconds.
octave:37> tic; zintwrong = bitshift(x + y + 1, -1); toc
Elapsed time is 0.00426006 seconds.
octave:38> tic; zintright = bitshift(uint32(x) + uint32(y) + 1, -1); toc
Elapsed time is 0.00503707 seconds.


So the additional conversion to uint32, rounding and division-by-bitshift
comes out slower than converting to float and doing the math.  Even when x and
y vectors are not converted, it is still on the order of converting to float
first.  I would think that in assembly code that the unsigned int conversion
might be "free", i.e., just a case of a different machine instruction that
treats the higher register bits as an extension from 8 bits to 32 bits.  I
suppose what the floating point instructions have going for them is inherent
rounding.

    _______________________________________________________

Reply to this item at:

  <http://savannah.gnu.org/bugs/?54567>

_______________________________________________
  Message sent via Savannah
  https://savannah.gnu.org/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]