Skip to content

Instantly share code, notes, and snippets.

@eccstartup
Created January 5, 2015 14:28
Show Gist options
  • Save eccstartup/7376dd803082174726be to your computer and use it in GitHub Desktop.
Save eccstartup/7376dd803082174726be to your computer and use it in GitHub Desktop.
module Sqrt () where
import Data.List
data MyDouble = MD Integer [Integer]
data MyDouble1 = MD1 Integer [Integer]
-- TO DO
toMyDouble :: Double -> MyDouble
toMyDouble = undefined
-- TO DO
fromMyDouble1 :: MyDouble1 -> String
fromMyDouble1 (MD1 n d) = take 100 $ concatMap show d
getFirst :: MyDouble -> Integer
getFirst (MD _ d) = head [x | x <- [9,8..0], x * x <= head d]
getNext :: Integer -> Integer -> Integer -> Integer
getNext remainder upward result = head [x | x <- [9,8..0], x * (result * 20 + x) <= remainder * 100 + upward]
getNexts :: Integer -> [Integer] -> Integer -> [Integer]
getNexts remainder upwards result = a : getNexts r1 (tail upwards) re1
where a = getNext remainder (head upwards) result
r1 = remainder * 100 + head upwards - (result * 20 + a) * a
re1 = result * 10 + a
mySqrt1 :: MyDouble -> MyDouble1
mySqrt1 md@(MD a b) = MD1 c d
where c = a
d = e : getNexts (head b - e * e) (tail b) e
e = getFirst md
getDigits :: MyDouble1 -> [Integer]
getDigits (MD1 _ a) = a
mySqrt :: Double -> String
mySqrt = fromMyDouble1 . mySqrt1 . toMyDouble
@eccstartup
Copy link
Author

2 in MyDouble looks like MD 1 (2:[00,00..]), which has a two digits' Integer list.
MyDouble1 has a single digit Integer list.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment