Los números de punto flotante (flotantes) se utilizan para representar números con decimales. En Rust, existen dos tipos principales: f32 (precisión simple) y f64 (precisión doble). El tipo f64 es el estándar por defecto en Rust y el más recomendado para cálculos generales debido a su mayor precisión. Estos tipos siguen el estándar IEEE 754. Un detalle crítico es el valor NaN (Not a Number), que representa un resultado indefinido; un comportamiento único de NaN es que nunca es igual a sí mismo (NaN != NaN). Para trabajar con ellos, puedes usar literales como 3.14, 2.0f32 (especificando el tipo) o notación científica como 1e10.

Los valores booleanos (bool) representan la lógica binaria con solo dos estados: true o false. A diferencia de otros lenguajes donde los enteros pueden actuar como booleanos, en Rust son tipos estrictos de un solo byte. Se operan con && (AND), || (OR) y ! (NOT). Estos operadores utilizan “evaluación de cortocircuito” (short-circuiting): en una operación &&, si la primera condición es false, la segunda ni siquiera se evalúa porque el resultado ya está determinado.

El tipo char representa un carácter Unicode de 4 bytes, lo que permite almacenar cualquier símbolo de cualquier idioma y emojis, no solo caracteres ASCII. Es importante no confundirlos con el tipo u8 (un byte), que se usa para datos ASCII o bytes puros.

fn main() {
    // --- TIPOS FLOTANTES ---
    let pi: f64 = 3.14159;               // f64 es el estándar por defecto
    let notacion: f64 = 1e10;            // Notación científica
    let precision_baja: f32 = 2.0f32;    // Litera f32 explícito
    let nan_val = f64::NAN;              // Representación de "Not a Number"
    let infinito = f64::INFINITY;        // Representación de infinito

    println!("Pi: {}, Notación: {}, f32: {}", pi, notacion, precision_baja);
    println!("¿NaN es igual a sí mismo? {}", nan_val == nan_val); // Siempre será false
    println!("¿Es infinito?: {}", infinito.is_infinite());

    // Métodos de f64
    let numero = -5.7;
    println!("Absoluto: {}, Floor: {}, Sqrt: {}", numero.abs(), numero.floor(), numero.sqrt());

    // --- TIPOS BOOLEANOS ---
    let es_rust_genial = true;
    let es_difcil = false;
    let logic_and = es_rust_genial && es_difcil; // Operador AND
    let logic_or = es_rust_genial || es_difcil;  // Operador OR
    let logic_not = !es_rust_genial;             // Operador NOT (negación)

    println!("Lógica -> AND: {}, OR: {}, NOT: {}", logic_and, logic_or, logic_not);

    // --- TIPOS CHAR (Unicode) ---
    let letra: char = 'A';               // Carácter simple
    let salto: char = '\n';              // Carácter de escape (salto de línea)
    let emoji: char = '\u{1F600}';       // Carácter Unicode con escape hexadecimal
    let byte_a: u8 = b'a';               // Un u8 es un byte (ASCII), no un char

    println!("Char: {}, Emoji: {}", letra, emoji);
    println!("Diferencia: char es Unicode (4 bytes), b'a' es u8 (1 byte)");
}

Explicación del Código


pi es una variable de tipo f64 que almacena un valor decimal estándar.
notacion usa la sintaxis 1e10 para representar $1 \times 10^{10}$.
precision_baja es de tipo f32, diferenciado mediante el sufijo f32 en el literal.
nan_val se obtiene de la constante f64::NAN; la comparación nan_val == nan_val resulta false por definición matemática del estándar.
infinito utiliza la constante f64::INFINITY.
– El método .abs() se aplica a numero para obtener su valor absoluto (5.7).
– Los métodos .floor() y .sqrt() son funciones integradas de los tipos flotantes para redondear hacia abajo y calcular la raíz cuadrada, respectivamente.
es_rust_genial y es_difil son de tipo bool.
logic_and, logic_or y logic_not utilizan los operadores lógicos &&, || y ! para transformar los valores booleanos.
lettera es un char que representa el carácter ‘A’.
salto es un char especial que representa un salto de línea.
emoji demuestra la potencia de char al usar la secuencia de escape Unicode \u{1F600} para representar una cara sonriente.
byte_a es de tipo u8, lo que ilustra que un byte es una representación más pequeña y limitada (ASCII) que un char de 4 bytes.

14