I think `mulAdd a b c` should be implemented as `a*b+c` even for Double/Float. It should only be an "optmization" (as in modular arithmetic), not a semantic changing operation. Thus justifying the optimization."fma" should be the "more-precise" version available for Float/Double. I don't think it makes sense to have "fma" for other types. That's why I'm advocating "mulAdd" to be part of "Num" for optimization purposes; and "fma" reserved for true IEEE754 types and semantics.I understand that Edward doesn't like this as this requires a different class; but really, that's the price to pay if we claim Haskell has proper support for IEEE754 semantics. (Which I think it should.) The operation is just different. It also should account for the rounding-modes properly.I think we can pull this off just fine; and Haskell can really lead the pack here. The situation with floats is even worse in other languages. This is our chance to make a proper implementation, and we have the right tools to do so.-Levent.On Mon, May 4, 2015 at 10:58 AM, Artyom <yom@artyom.me> wrote:On 05/04/2015 08:49 PM, Levent Erkok wrote:
No, it looks to me that Edward wants to have a more precise operation in Num:Artyom: That's precisely the point. The true IEEE754 variants where precision does matter should be part of a different class. What Edward and Yitz want is an "optimized" multiply-add where the semantics is the same but one that goes faster.
I'd have to make a second copy of the function to even try to see the precision win.Unless I'm wrong, you can't have the following things simultaneously:
- the compiler is free to substitute a+b*c with mulAdd a b c
- mulAdd a b c is implemented as fma for Doubles (and is more precise)
- Num operations for Double (addition and multiplication) always conform to IEEE754
The true IEEE754 variants where precision does matter should be part of a different class.So, does it mean that you're fine with not having point #3 because people who need it would be able to use a separate class for IEEE754 floats?
_______________________________________________
Libraries mailing list
Libraries@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries