使用非常简单的代码:package mainimport ( "fmt" "math" "math/cmplx")func sqrt(x float64) string { if x < 0 { return fmt.Sprint(cmplx.Sqrt(complex128(x))) } return fmt.Sprint(math.Sqrt(x))}func main() { fmt.Println(sqrt(2), sqrt(-4))}我收到以下错误消息:main.go:11: cannot convert x (type float64) to type complex128我尝试了不同的方法,但找不到如何将 a 转换float64为complex128(只是为了能够对cmplx.Sqrt()负数使用函数)。处理这个问题的正确方法是什么?
1 回答
互换的青春
TA贡献1797条经验 获得超6个赞
您并不是真的想将 a 转换为float64,complex128而是想构造一个complex128指定实部的值。
为此可以使用内置complex()函数:
func complex(r, i FloatType) ComplexType
使用它你的sqrt()功能:
func sqrt(x float64) string {
if x < 0 {
return fmt.Sprint(cmplx.Sqrt(complex(x, 0)))
}
return fmt.Sprint(math.Sqrt(x))
}
在Go Playground上试一试。
笔记:
您可以在float不使用复数的情况下计算负数的平方根:它将是一个复数值,其实部为0虚部math.Sqrt(-x)i(因此结果:)(0+math.Sqrt(-x)i):
func sqrt2(x float64) string {
if x < 0 {
return fmt.Sprintf("(0+%.15fi)", math.Sqrt(-x))
}
return fmt.Sprint(math.Sqrt(x))
}
- 1 回答
- 0 关注
- 219 浏览
添加回答
举报
0/150
提交
取消