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,但为什么。我正在尝试制作二次计算器。我想要的就是输出数字。
答案 0 :(得分:5)
因为你试图取负数的平方根而不是有效的操作(不仅仅是在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.
编辑:请不要在算术位上争论语义。如果你想讨论负数的平方根,那就不是这个地方了。一般来说,不可能采用负数的平方根。
答案 1 :(得分:2)
由于您采用负数的平方根,因此得到了一个虚数结果(sqrt(-9) == 3i
)。这肯定不是你想要做的。相反,做:
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)
}
答案 2 :(得分:1)
您尝试使用Sqrt负数,因此返回NaN(非数字) 我运行代码并打印结果:
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)
控制台: 9.00 32.00 -23.00 为NaN
Golang中的Sqrt:https://golang.org/pkg/math/#Sqrt