zoukankan      html  css  js  c++  java
  • golang sqrt error练习

     

    练习:错误

    先前的练习中复制 Sqrt 函数,并修改使其返回 error 值。

    由于不支持复数,当 Sqrt 接收到一个负数时,应当返回一个非 nil 的错误值。

    创建一个新类型

    type ErrNegativeSqrt float64

    为其实现

    func (e ErrNegativeSqrt) Error() string

    使其成为一个 error, 该方法就可以让 ErrNegativeSqrt(-2).Error() 返回 `"cannot Sqrt negative number: -2"`。

    *注意:* 在 Error 方法内调用 fmt.Sprint(e) 将会让程序陷入死循环。可以通过先转换 e 来避免这个问题:fmt.Sprint(float64(e))。请思考这是为什么呢?

    修改 Sqrt 函数,使其接受一个负数时,返回 ErrNegativeSqrt 值。

    参考解法:

    package main

    import (
        "fmt"
    )

    type ErrNegativeSqrt float64

    func (e ErrNegativeSqrt) Error() string {
        return fmt.Sprintf("cannot Sqrt negative number: %f", e)
    }

    func Sqrt(x float64) (float64, error) {

        if x < 0 {
            return 0, ErrNegativeSqrt(x)
        }

        z := 1.0
        for i := 0; i < 20; i++ {
            z = z - (z*z-x)/(2*x)
        }

        return z, nil
    }

    func main() {
        nums := []float64{4, -6, 8, 10}

        for _, v := range nums {
            sqrv, e := Sqrt(v)
            if e == nil {
                fmt.Printf("sqrt(%f)=%f ", v, sqrv)
            } else {
                fmt.Println(e)
            }
        }

    }

  • 相关阅读:
    poj 2195 Going Home
    poj 3068 "Shortest" pair of paths
    aoj 2226 Merry Christmas
    poj 2226 Muddy Fields
    foj Problem 2275 Game
    foj Problem 2283 Tic-Tac-Toe
    XidianOJ 1081 锘爷与矩阵
    XidianOJ 1061 a+boflw
    XidianOJ 1080 锘爷与跳楼塔
    XidianOJ 1017 Codeforce上的rating
  • 原文地址:https://www.cnblogs.com/zejin2008/p/7142068.html
Copyright © 2011-2022 走看看