Created
January 5, 2015 14:28
-
-
Save eccstartup/7376dd803082174726be to your computer and use it in GitHub Desktop.
unfinished on converting between Doubles, http://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Decimal_.28base_10.29
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
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
http://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Decimal_.28base_10.29