fast-math-1.0: Numeric/FastMath/NaN.hs
-- | This module contains rules that break the way NaN is handled for "Float"
-- and "Double" types. Still, these rules should be safe in the vast majority of
-- applications.
--
-- Importing this module is similar to compiling with gcc's @-fno-signaling-nans@
-- and @-ffinite-math-only@.
--
module Numeric.FastMath.NaN
where
import GHC.Exts
{-# RULES
"minusDouble x x" forall x. (-##) x x = 0.0##
"timesDouble 0 x" forall x. (*##) 0.0## x = 0.0##
"timesDouble x 0" forall x. (*##) x 0.0## = 0.0##
"divideDouble x 1" forall x. (/##) x 1.0## = x
"divideDouble x -1" forall x. (/##) x (-1.0##) = negateDouble# x
"divideDouble 0 x" forall x. (/##) 0.0## x = 0.0##
#-}
{-# RULES
"minusFloat x x" forall x. minusFloat# x x = 0.0#
"timesFloat x 0" forall x. timesFloat# x 0.0# = 0.0#
"timesFloat 0 x" forall x. timesFloat# 0.0# x = 0.0#
"divideFloat x 1" forall x. divideFloat# x 1.0# = x
"divideFloat x -1" forall x. divideFloat# x (-1.0#) = negateFloat# x
"divideFloat 0 x" forall x. divideFloat# 0.0# x = 0.0#
#-}