New submission from Mark Dickinson:

IEEE 754, the C99 standard, the Decimal IBM standard and Java all 
support/specify a 'remainder-near' operation. Apart from being standard, this 
has a number of useful applications:

1. Argument reduction in numerical algorithms: it's common to want to reduce to 
a range [-modulus/2, modulus/2] rather than [0, modulus).
2. Particular case of the above: reduction of angles to lie in the range [-pi, 
pi]
3. Rounding a float x to the nearest multiple of y. This is a much-asked 
StackOverflow question, and the standard answer of y * round(x / y) risks 
introducing floating-point error and so can give incorrect results in corner 
cases. With a remainder operation, it's trivial to do this correctly: x - 
remainder(x, y) gives the closest representable float to the closest integer 
multiple of y to x.

remainder(x, y) has some nice properties: it's *always* exactly representable 
(unlike x % y), it satisfies the symmetry remainder(-x, y) == -remainder(x, y), 
and it's periodic with period 2*y.

I have a patch, and will make a PR shortly.

----------
components: Extension Modules
messages: 290985
nosy: mark.dickinson
priority: normal
severity: normal
stage: patch review
status: open
title: Add math.remainder operation
type: enhancement
versions: Python 3.7

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue29962>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to