2015-06-24 3 views
1

С очень простым кодом:В GO, как преобразовать float в комплекс?

package main 

import (
    "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 

Я пробовал разные способы, но не смог выяснить, как преобразовать float64 к complex128 (только иметь возможность использовать функцию cmplx.Sqrt() на отрицательном числе).

Каков правильный способ справиться с этим?

ответ

7

Вы не хотите конвертировать 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)) 
} 
+0

Thx, вы правы, именно это я и искал. –

Смежные вопросы