Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to convert float to complex?

With the very simple code :

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

I get the following error message :

main.go:11: cannot convert x (type float64) to type complex128

I tried different ways, but couldn't find out how to convert a float64 to complex128 (just to be able to use cmplx.Sqrt() function on a negative number).

Which is the correct way to handle this ?

like image 566
Orabîg Avatar asked May 02 '26 04:05

Orabîg


1 Answers

You don't really want to convert a float64 to complex128 but rather you want to construct a complex128 value where you specify the real part.

For that can use the builtin complex() function:

func complex(r, i FloatType) ComplexType

Using it your sqrt() function:

func sqrt(x float64) string {
    if x < 0 {
        return fmt.Sprint(cmplx.Sqrt(complex(x, 0)))
    }
    return fmt.Sprint(math.Sqrt(x))
}

Try it on the Go Playground.

Note:

You can calculate the square root of a negative float number without using complex numbers: it will be a complex value whose real part is 0 and imaginary part is math.Sqrt(-x)i (so the result: (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))
}
like image 151
icza Avatar answered May 05 '26 10:05

icza



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!