module Gamgine.Math.Utils where clamp :: Double -> Double -> Double -> Double clamp :: Double -> Double -> Double -> Double clamp Double min Double max Double value | Double value Double -> Double -> Bool forall a. Ord a => a -> a -> Bool < Double min = Double min | Double value Double -> Double -> Bool forall a. Ord a => a -> a -> Bool > Double max = Double max | Bool otherwise = Double value flipSign :: Double -> Double flipSign :: Double -> Double flipSign Double num = -Double 1 Double -> Double -> Double forall a. Num a => a -> a -> a * Double -> Double forall a. Num a => a -> a signum Double num maxFloat :: RealFloat a => a -> a maxFloat :: forall a. RealFloat a => a -> a maxFloat a a = Integer -> Int -> a forall a. RealFloat a => Integer -> Int -> a encodeFloat Integer m Int n where b :: Integer b = a -> Integer forall a. RealFloat a => a -> Integer floatRadix a a e :: Int e = a -> Int forall a. RealFloat a => a -> Int floatDigits a a (Int _, Int e') = a -> (Int, Int) forall a. RealFloat a => a -> (Int, Int) floatRange a a m :: Integer m = Integer b Integer -> Int -> Integer forall a b. (Num a, Integral b) => a -> b -> a ^ Int e Integer -> Integer -> Integer forall a. Num a => a -> a -> a - Integer 1 n :: Int n = Int e' Int -> Int -> Int forall a. Num a => a -> a -> a - Int e instance Bounded Double where maxBound :: Double maxBound = Double -> Double forall a. RealFloat a => a -> a maxFloat (Double 0 :: Double) minBound :: Double minBound = -Double forall a. Bounded a => a maxBound minPositiveFloat :: RealFloat a => a -> a minPositiveFloat :: forall a. RealFloat a => a -> a minPositiveFloat a a = Integer -> Int -> a forall a. RealFloat a => Integer -> Int -> a encodeFloat Integer 1 (Int -> a) -> Int -> a forall a b. (a -> b) -> a -> b $ (Int, Int) -> Int forall a b. (a, b) -> a fst (a -> (Int, Int) forall a. RealFloat a => a -> (Int, Int) floatRange a a) Int -> Int -> Int forall a. Num a => a -> a -> a - a -> Int forall a. RealFloat a => a -> Int floatDigits a a minPositiveDouble :: Double minPositiveDouble = Double -> Double forall a. RealFloat a => a -> a minPositiveFloat (Double 0 :: Double)