es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo comparar desigualdades para Go bigInt?

Estoy intentando comparar dos enteros grandes. Estoy consultando la documentación: https://pkg.go.dev/math/big#Int y no veo un operador de desigualdad, pero sí veo uno de igualdad (Cmp).

¿Cómo debo comparar un entero grande a con un entero grande b? ¿Debo restar b de a y comparar el signo? ¿O hay algo que me esté perdiendo? Ejemplo:

c := (new.bigInt).Sub(a, b)
i := c.Sign()
if i < 0 {
fmt.Println(“a < b”)
}

Me resulta un poco extraño que no haya un operador de desigualdad ni mucha información sobre esto en línea, por lo que creo que estoy haciendo algo mal.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para comparar dos números enteros grandes en Go, puedes usar el método Cmp del tipo big.Int. El método Cmp compara dos números enteros grandes y devuelve un entero que representa su relación. Si a es menor que b, Cmp devolverá -1, si a es igual a b, Cmp devolverá 0, y si a es mayor que b, Cmp devolverá 1.

    Aquí tienes un ejemplo de cómo comparar dos números enteros grandes usando el método Cmp:

    if a.Cmp(b) < 0 {
        fmt.Println("a < b")
    } else if a.Cmp(b) > 0 {
        fmt.Println("a > b")
    } else {
        fmt.Println("a == b")
    }
    

    Alternativamente, puedes restar b de a y comparar el signo del resultado como se muestra en tu ejemplo. Este método también funcionará, pero usar el método Cmp es más sencillo y probablemente más fácil de leer.

    Vale la pena destacar que no hay un operador de desigualdad en Go porque los operadores de comparación (<, <=, >, >=) funcionan para todos los tipos de datos, incluyendo los números enteros grandes. Por ejemplo, puedes usar el operador < para comparar dos números enteros grandes de la siguiente manera:

    if a < b {
        fmt.Println("a < b")
    } else if a > b {
        fmt.Println("a > b")
    } else {
        fmt.Println("a == b")
    }
    

    Sin embargo, usar los operadores de comparación con números enteros grandes puede ser más lento que usar el método Cmp, especialmente para números muy grandes.

Comments are closed.