diff --git a/src/stage1/bigfloat.cpp b/src/stage1/bigfloat.cpp index a2a3a3b69c..58b0aff54a 100644 --- a/src/stage1/bigfloat.cpp +++ b/src/stage1/bigfloat.cpp @@ -46,6 +46,10 @@ void bigfloat_init_bigint(BigFloat *dest, const BigInt *op) { float128_t base; ui64_to_f128M(UINT64_MAX, &base); + float128_t one_f128; + ui32_to_f128M(1, &one_f128); + f128M_add(&base, &one_f128, &base); + const uint64_t *digits = bigint_ptr(op); for (size_t i = op->digit_count - 1;;) { diff --git a/test/stage1/behavior/cast.zig b/test/stage1/behavior/cast.zig index ce0d16d1a0..0eb00512b9 100644 --- a/test/stage1/behavior/cast.zig +++ b/test/stage1/behavior/cast.zig @@ -375,6 +375,22 @@ test "comptime_int @intToFloat" { expect(@TypeOf(result) == f32); expect(result == 1234.0); } + { + const result = @intToFloat(f64, 1234); + expect(@TypeOf(result) == f64); + expect(result == 1234.0); + } + { + const result = @intToFloat(f128, 1234); + expect(@TypeOf(result) == f128); + expect(result == 1234.0); + } + // big comptime_int (> 64 bits) to f128 conversion + { + const result = @intToFloat(f128, 0x1_0000_0000_0000_0000); + expect(@TypeOf(result) == f128); + expect(result == 0x1_0000_0000_0000_0000.0); + } } test "@intCast i32 to u7" {