Den tis 8 nov. 2022 kl 11:44 skrev Sebastian Berg <
sebast...@sipsolutions.net>:

> On Thu, 2022-11-03 at 11:37 +0100, Oscar Gustafsson wrote:
> > Hi all,
> >
> > I hope this is the correct way to propose a new feature.
> > https://github.com/numpy/numpy/issues/22522
> >
>
> Thanks for the proposal.  I don't have much of an opinion on this and
> right now I am mainly wondering whether there is prior art which can
> inform us that this is relatively widely useful?
>

Well, if designing hardware it is typically more useful than decimal
rounding. Not sure what to bring up as prior art, but the whole idea is to
use it to emulate fixed-point behavior. So quantizing/rounding a
floating-point value to the nearest fixed-point value with a given number
of fractional bits. bround(0.37, 3) = 0.011 = 0.375. Also, see ac_fixed
below which is part of Algorithmic C types, ac_types, https://hlslibs.org/
supported in most high-level synthesis tools, see e.g.
https://www.intel.com/content/www/us/en/develop/documentation/oneapi-fpga-optimization-guide/top/quick-reference/algorithmic-c-data-types.html

> Currently, the around-function supports rounding to a given number of
> > decimal digits. It is often quite convenient to be able to round to a
> > given
> > number of binary digits to mimic fixed-point representations.
> > Currently
> > this can be readily achieved using e.g.
> >
> > fractional_bits = 5
> > scale = 2**fractional_bits
> > x_round = np.around(x*scale)/scale
> >
> > However, it would be more convenient (and probably faster) to provide
> > dedicated support for it.
>
>
> This seems more like a a place for some bit-fiddling, but I am not
> sure.  Also a question is whether rounding modes make sense and what
> you want (truncate, round to even?).
>

The "correct" way would of course be to do this using integers or ac_fixed
https://github.com/hlslibs/ac_types/blob/master/include/ac_fixed.h

You are correct that one would like to support different rounding modes
(although for fixed-point one usually do not care as much about that as for
floating-point, standard "add half LSB" rounding and truncation are
typically enough). I didn't want to bring that up at this early stage.


> I suspect that this would be more something for a project similar to
> Warrens ufunclab:
>
>     https://github.com/WarrenWeckesser/ufunclab
>
> I.e. written as a NumPy ufunc, but not in NumPy iself.
>
> You may be correct. I'll have a look at that approach for a
relatively simple way to obtain it.

Not sure how straightforward it is, but if one could supply the different
ac_*-types as custom data types to NumPy that would be a great way of doing
it. However, from a quick check it seems like it is only possible to add
custom types which are "structs" of existing types. ac_typed are that in
some sense (everything is internally represented as integer-types), but
probably not close enough for a simple implementation.

BR Oscar Gustafsson


>
> - Sebastian
>
>
> >
> > I see a few different ways to obtain this:
> > 1. Provide a separate function (binaryround?)
> > 2. Provide a base argument to around which defaults to 10.
> > 3. Provide a quant(ization) function where the argument is the step-
> > size.
> > (For completeness, one may think of having multiple quantization
> > modes, not
> > just rounding)
> >
> > Any opinions?
> >
> > BR Oscar Gustafsson
> > _______________________________________________
> > NumPy-Discussion mailing list -- numpy-discussion@python.org
> > To unsubscribe send an email to numpy-discussion-le...@python.org
> > https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
> > Member address: sebast...@sipsolutions.net
>
>
> _______________________________________________
> NumPy-Discussion mailing list -- numpy-discussion@python.org
> To unsubscribe send an email to numpy-discussion-le...@python.org
> https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
> Member address: oscar.gustafs...@gmail.com
>
_______________________________________________
NumPy-Discussion mailing list -- numpy-discussion@python.org
To unsubscribe send an email to numpy-discussion-le...@python.org
https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
Member address: arch...@mail-archive.com

Reply via email to