Floats

Los floats de Zig son estrictamente compatibles con IEEE a menos que se use @setFloatMode(.Optimized), que es equivalente a -ffast-math de GCC. Los floats se coercen a tipos de float más grandes.

test "Aunmentando el tipo del flotante" {
    const a: f16 = 0;
    const b: f32 = a;
    const c: f128 = b;
    try expect(c == @as(f128, a));
}

Los floats admiten varios tipos de literales.

const floating_point: f64 = 123.0E+77;
const another_float: f64 = 123.0;
const yet_another: f64 = 123.0e+77;

const hex_floating_point: f64 = 0x103.70p-5;
const another_hex_float: f64 = 0x103.70;
const yet_another_hex_float: f64 = 0x103.70P-5;

Los guiones bajos también pueden colocarse entre los dígitos.

const lightspeed: f64 = 299_792_458.000_000;
const nanosecond: f64 = 0.000_000_001;
const more_hex: f64 = 0x1234_5678.9ABC_CDEFp-10;

Los enteros y los floats pueden ser convertidos usando las funciones integradas @floatFromInt y @intFromFloat. @floatFromInt es siempre seguro, mientras que @intFromFloat es un comportamiento ilegal detectable si el valor float no cabe en el tipo de destino del entero.

test "Conversión de int a float " {
    const a: i32 = 0;
    const b = @as(f32, @floatFromInt(a));
    const c = @as(i32, @intFromFloat(b));
    try expect(c == a);
}
Edita esta pagina Última actualización: 5/15/2024 por Vital