Go 为什么float和ints=Nan?围棋

Go 为什么float和ints=Nan?围棋,go,Go,这将输出一个NaN,但为什么呢。我想做一个二次计算器。我只想让它输出一个数字。因为你试图取一个负数的平方根,这个负数不是一个有效的运算(不仅仅在数学中是Go),所以它返回NaN,这是一个非数字的首字母缩略词 package main import ( "fmt" "math" ) func main() { // x= +- sqrtB-4ac/2a cal() } func cal() { b := 3 a := 4 c := 2

这将输出一个NaN,但为什么呢。我想做一个二次计算器。我只想让它输出一个数字。

因为你试图取一个负数的平方根,这个负数不是一个有效的运算(不仅仅在数学中是Go),所以它返回NaN,这是一个非数字的首字母缩略词

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

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

既然取负数的平方根,就得到了一个假想的结果(
sqrt(-9)=3i
)。这肯定不是你想要做的。相反,要:

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.

您尝试使用Sqrt负数,因此始终返回NaN(不是数字) 我运行代码并打印结果:

func main() {
    b := float64(3)
    a := float64(4)
    c := float64(2)

    result := [2]float64{(-b + math.Sqrt(math.Abs(b*b - 4*a*c))) / 2 * a,
                         (-b - math.Sqrt(math.Abs(b*b - 4*a*c))) / 2 * a)}
    fmt.Println(result)
}
控制台: 9 32 -23.00 楠


Golang中的Sqrt:

尝试
q:=math.Sqrt(math.Abs(b2 ac))
不是每个二次方程都有实数解,这与其他两个答案有何不同?
b := 3
    a := 4
    c := 2
    b2 := float64(b*b)
    fmt.Printf("%.2f \n", b2)
    ac := float64(4)*float64(a)*float64(c)
    fmt.Printf("%.2f \n", ac)
    fmt.Printf("%.2f \n", b2-ac)
    q := math.Sqrt(b2-ac)
    fmt.Print(q)