digitalmars.D.bugs - [Issue 18257] New: std.math.abs/fabs - redesign
- d-bugmail puremagic.com (32/32) Jan 17 2018 https://issues.dlang.org/show_bug.cgi?id=18257
https://issues.dlang.org/show_bug.cgi?id=18257 Issue ID: 18257 Summary: std.math.abs/fabs - redesign Product: D Version: D2 Hardware: All OS: Windows Status: NEW Severity: enhancement Priority: P1 Component: phobos Assignee: nobody puremagic.com Reporter: rumbu rumbu.ro Problem 1: std.math.abs signature matches any type which supports the comparison operator. That means that you cannot write your own abs for a custom numeric type as long as your type has a comparison operator. Problem 2: even if a custom numeric type supports comparison operator, std.math.abs is declared as pure safe nothrow nogc, forcing a potential numeric implementation to decorate his opCmp overload with the same attributes. Real case: according to IEEE-754/2008, the comparison operator *must* signal an invalid operation exception if it encounters a NaN value or *must* set a global error flag. For a standard compliant numeric type, the comparison operator cannot be decorated with nothrow nocg (since it's throwing exceptions) and cannot be pure (since it's setting global error flags). Proposal 1: Rethink abs signature to limit usage to standard numeric types, where comparison is guaranteed to be pure safe nothrow nogc Proposal 2: Drop fabs. This is probably coming from C where overloads are not available. There is no need to have two names for a function doing the exact same thing. abs must catch any signed type, including floating point. --
Jan 17 2018