go - 为什么 floats 和 ints = Nan?在去

标签 go

package main

import (
    "fmt"
    "math"
)

func main() {
    // x= +- sqrtB-4ac/2a
    cal()
}

func cal() {
    b := 3
    a := 4
    c := 2
    b2 := float64(b*b)
    ac := float64(4)*float64(a)*float64(c)
    q := math.Sqrt(b2-ac)
    fmt.Print(q)
}

这将输出 NaN,但为什么。我正在尝试制作二次计算器。我想要的只是输出数字。

最佳答案

因为您要对负数求平方根,这不是有效运算(不仅在 Go 中,在数学中),所以它返回 NaN,这是 Not A Number 的首字母缩写词。

b := 3
a := 4
c := 2
b2 := float64(b*b) // sets b2 == 9
ac := float64(4)*float64(a)*float64(c) // ac == 32 
q := math.Sqrt(b2-ac) // Sqrt(9-32) == Sqrt(-23) == NaN
fmt.Print(q)
q = math.Sqrt(math.Abs(b2-ac)) // suggested in comments does Sqrt(23) == ~4.79 
// perhaps the outcome you're looking for.

编辑:请不要争论数学位的语义。如果你想讨论负数的平方根,这里不是地方。一般来说,负数是不能开平方的。

关于go - 为什么 floats 和 ints = Nan?在去,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34029609/

相关文章:

encryption - 如何用RSA加密大文件?

go - 在保留顺序的同时对 slice 进行并发反序列化

google-app-engine - 如何在 martini 中注入(inject) appengine.Context

go - 在 Go 数组中查找所有匹配项

angularjs - 你如何设置 go 服务器以与 AngularJS html5mode 兼容?

javascript - Go 中是否有与此 JS 表达式等效的内容?

go - 当使用没有设置 GOPATH 的模块时,go 将导入放在哪里?

golang sync.WaitGroup 在 Linux 上没有完成

image - Golang如何将图像连接/附加到另一个

go - 在结构上设置字段丢失?