Data commit

This commit is contained in:
Ingy döt Net 2023-07-01 11:58:00 -04:00
parent 7387c8f97b
commit cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions

View file

@ -0,0 +1,3 @@
import Data.Decimal
import Data.Ratio
import Data.Complex

View file

@ -0,0 +1,2 @@
class ContainsInteger a where
isInteger :: a -> Bool

View file

@ -0,0 +1,2 @@
instance ContainsInteger Int where isInteger _ = True
instance ContainsInteger Integer where isInteger _ = True

View file

@ -0,0 +1,6 @@
isIntegerF :: (Eq x, RealFrac x) => x -> Bool
isIntegerF x = x == fromInteger (truncate x)
instance ContainsInteger Double where isInteger = isIntegerF
instance Integral i => ContainsInteger (DecimalRaw i) where isInteger = isIntegerF
instance Integral i => ContainsInteger (Ratio i) where isInteger = isIntegerF

View file

@ -0,0 +1,2 @@
instance (Eq a, Num a, ContainsInteger a) => ContainsInteger (Complex a) where
isInteger z = isInteger (realPart z) && (imagPart z == 0)

View file

@ -0,0 +1,7 @@
x ~~ eps = abs x <= eps
almostInteger :: RealFrac a => a -> a -> Bool
almostInteger eps x = (x - fromInteger (round x)) ~~ eps
almostIntegerC :: RealFrac a => a -> Complex a -> Bool
almostIntegerC eps z = almostInteger eps (realPart z) && (imagPart z) ~~ eps

View file

@ -0,0 +1,25 @@
tests = all (== True)
[ isInteger (5 :: Integer)
, isInteger (5.0 :: Decimal)
, isInteger (-5 :: Integer)
, isInteger (0 :: Decimal)
, isInteger (-2.1e120 :: Double)
, isInteger (5 % 1 :: Rational)
, isInteger (4 % 2 :: Rational)
, isInteger (5 :+ 0 :: Complex Integer)
, isInteger (5.0 :+ 0.0 :: Complex Decimal)
, isInteger (6 % 3 :+ 0 :: Complex Rational)
, isInteger (1/0 :: Double) -- Infinity is integer
, isInteger (1.1/0 :: Double) -- Infinity is integer
, not $ isInteger (5.01 :: Decimal)
, not $ isInteger (-5e-2 :: Double)
, not $ isInteger (5 % 3 :: Rational)
, not $ isInteger (5 :+ 1 :: Complex Integer)
, not $ isInteger (6 % 4 :+ 0 :: Complex Rational)
, not $ isInteger (5.0 :+ 1.0 :: Complex Decimal)
, almostInteger 0.01 2.001
, almostInteger 0.01 (-1.999999)
, almostInteger (1 % 10) (24 % 23)
, not $ almostInteger 0.01 2.02
, almostIntegerC 0.001 (5.999999 :+ 0.000001)
]

View file

@ -0,0 +1,6 @@
pithagoreanTriangles :: [[Integer]]
pithagoreanTriangles =
[ [a, b, round c] | b <- [1..]
, a <- [1..b]
, let c = sqrt (fromInteger (a^2 + b^2))
, isInteger (c :: Double) ]