Haskell程序 计算给定数的平方根
在Haskell中,有不同的技术来计算一个数字的平方根。一个数字的平方根是一个值,当它与自己相乘时,等于原来的数字。例如,9的平方根是3,因为3 x 3 = 9。
计算方法
- 第1步 – 定义了平方根函数
-
第2步 – 程序的执行将从主函数开始。main()函数拥有整个程序的控制权。它被写成main = do。它接收一个要计算平方根的整数。
-
第3步 – 名为 “num “的变量正在被初始化。它将保存一个要计算平方根的整数。
-
第4步 – 使用’show’函数和’putStrLn’语句在调用squareRoot函数时将结果的平方根打印到控制台。
例子1
在这个例子中,sqrt函数被用来计算数字的平方根,并将结果存储在结果变量中。最后,它将计算出的平方根打印到控制台。
squareRoot :: Double -> Double
squareRoot x = sqrt x
main :: IO()
main = do
let num = 144
let result = squareRoot num
putStrLn ("The square root of " ++ show num ++ " is " ++ show result)
输出
The square root of 144.0 is 12.0
例2
在这个例子中,**
运算符被用来将数字提升到0.5的幂,从而得到数字的平方根,并将结果存储在结果变量中。最后,它打印出了计算出的平方根。
squareRoot :: Double -> Double
squareRoot x = x ** 0.5
main :: IO()
main = do
let num = 169
let result = squareRoot num
putStrLn ("The square root of " ++ show num ++ " is " ++ show result)
输出
The square root of 169.0 is 13.0
例3
在这个例子中,Newton-Raphson方法被用来寻找数字的平方根。Newton-Raphson方法需要一个函数,它的导数,一个初始猜测和一个公差值。在本例中,函数为y*y-x
,其导数为2*y
,初始猜测值为1,它将迭代到猜测值的平方与输入数的差值小于公差值(eps)为止。
squareRoot :: Double -> Double
squareRoot x = newtonRaphson x (\y -> y*y - x) (\y -> 2*y) 1
newtonRaphson :: Double -> (Double -> Double) -> (Double -> Double) -> Double -> Double
newtonRaphson x f f' guess = if abs (f guess) < eps then guess else newtonRaphson x f f' (guess - f guess / f' guess)
where eps = 0.00001
main :: IO()
main = do
let num = 169
let result = squareRoot num
putStrLn ("The square root of " ++ show num ++ " is " ++ show result)
输出
The square root of 169.0 is 13.000000070110696
结论
在Haskell中,一个数字的平方根可以通过使用sqrt函数,使用**
运算符或使用Newton-Raphson方法来计算。