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)
            }
        }

    }

  • 相关阅读:
    shell预备知识
    php session和cookie
    php数据库访问抽象层PDO
    递归求斐波那契数
    SqlDataReader的使用
    DataAdapter与DataSet的使用
    CLR
    Android Studio javadoc 生成注释文档
    MySQL教程之concat以及group_concat的用法
    一文读懂MQTT协议
  • 原文地址:https://www.cnblogs.com/zejin2008/p/7142068.html
Copyright © 2011-2022 走看看