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\n", v, sqrv)
        } else {
            fmt.Println(e)
        }
    }

}

时间: 2024-10-11 12:29:19

golang sqrt error练习的相关文章

golang fatal error: all goroutines are asleep - deadlock!

channel默认上是阻塞的,也就是说,如果Channel满了,就阻塞写,如果Channel空了,就阻塞读.阻塞的含义就是一直等到轮到它为止.单有时候我们会收到 fatal error: all goroutines are asleep - deadlock!  异常,这是如何呢? 代码例子: package main import "fmt" func main() {     channel := make(chan string, 2)     fmt.Println(&quo

golang build error: syntax error: nested func not allowed

在笔记本中写了一个简易web程序,但是编译失败,提示“syntax error: nested func not allowed” . 不明白什么意思,幸好代码量小,原来是方法的末尾的“}”丢了! package main import "fmt" import "net/http" func main() { http.HandleFunc("/", hello) err := http.ListenAndServe(":8080&q

golang fatal error: concurrent map read and map write

调试程序的时候,为了打印map中的内容 ,直接 使用seelog 的方法打印 map中的内容到日志,结果出现 "concurrent map read and map write"的错误,导致程序异常退出,后来将代码注释后恢复正常.猜想了下是log 打印属于写操作,取出map内容的时候属于读操作,log记录的时候产生lock引发异常. 具体细节就没研究,先mark下.

如何加速golang写业务的开发速度

如何加速golang写业务的开发速度 不要忌讳panic golang写业务代码经常会被吐槽,写业务太慢了,其中最大的吐槽点就是,处理各种error太麻烦了.一个项目中,会有30%或者更多的是在处理error. 对于golang的error这个事情,golang的官方也说的很详细,建议函数返回error,并且让上层调用处理. error和panic实际上就是以前写PHP业务的时候争论的使用errno还是exception的争论.实际上,后续在PHP世界里面,大家都倾向于会使用exception来

python3 偏最小二乘法实现

python3的sklearn库中有偏最小二乘法. 可以参见下面的库说明:http://scikit-learn.org/stable/modules/generated/sklearn.cross_decomposition.PLSRegression.html 程序来源:来源:https://blog.csdn.net/li_huifei/article/details/78467689 经过修改可以在python3上运行 我的数据A.csv 我的数据RON.csv # -*- coding

“猜你喜欢”的背后揭秘--10分钟教你用Python打造推荐系统

欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! 话说,最近的瓜实在有点多,从我科校友李雨桐怒锤某男.陈羽凡吸毒被捕.蒋劲夫家暴的三连瓜,到不知知网翟博士,再到邓紫棋解约蜂鸟.王思聪花千芳隔空互怼. 而最近的胜利夜店.张紫妍巨瓜案.最强大脑选手作弊丑闻,更是让吃瓜群众直呼忙不过来:瓜来的太快就像龙卷风,扶我起来,我还能吃! 说到底,这其实是一个信息过载的时代:公众号每天数十条的推送.朋友圈的晒娃晒旅游.各种新闻报道扑面而来令人眼花缭乱.目不暇接-- 那么问题来了,怎么找到自己的关注点呢

【411】COMP9024 Assignment1 问题汇总

1. 构建 Makefile 文件后运行错误,undefined reference to 'sqrt' 实际上是没有链接math数学库,所以要 $gcc test.c –lm //-lm就是链接到math库. 参考:C 语言 undefined reference to 'sqrt' 问题解决 参考:Why am I getting “undefined reference to sqrt” error even though I include math.h header? [duplica

待解.Math.sqrt;Double;Rounding Error

1 package com.java7; 2 3 // Show square roots of 1 to 99 and the rounding error. 4 public class SqrRoot { 5 public static void main(String[] args) { 6 double num, sroot, rerr; 7 8 for(num = 1.0; num < 100.0; num++) { 9 sroot = Math.sqrt(num); 10 Syst

golang panic: runtime error: invalid memory address or nil pointer dereference [

今天做消息队列持久化存储服务过程中,golang操作mysql 报错: panic: runtime error: invalid memory address or nil pointer dereference [ 经过反复查找,原来是变量定义问题 做个记录,以后再有问题可以做个参考,原始代码: var Db *sql.DB func init() {     Db, err := sql.Open("mysql", "root:[email protected]/tes