| ... | ... | @@ -1207,10 +1207,9 @@ pub fn formatFloatHexadecimal( |
| 1207 | 1207 | mantissa |= 1 << fractional_bits; // Add the implicit integer bit. |
| 1208 | 1208 | } |
| 1209 | 1209 | |
| 1210 | | // Fill in zeroes to round the mantissa width to a multiple of 4. |
| 1211 | | if (T == f16) mantissa <<= 2 else if (T == f32) mantissa <<= 1; |
| 1212 | | |
| 1213 | 1210 | const mantissa_digits = (fractional_bits + 3) / 4; |
| 1211 | // Fill in zeroes to round the fraction width to a multiple of 4. |
| 1212 | mantissa <<= mantissa_digits * 4 - fractional_bits; |
| 1214 | 1213 | |
| 1215 | 1214 | if (options.precision) |precision| { |
| 1216 | 1215 | // Round if needed. |
| ... | ... | @@ -2317,21 +2316,25 @@ test "float.hexadecimal" { |
| 2317 | 2316 | try expectFmt("f16: 0x1.554p-2", "f16: {x}", .{@as(f16, 1.0 / 3.0)}); |
| 2318 | 2317 | try expectFmt("f32: 0x1.555556p-2", "f32: {x}", .{@as(f32, 1.0 / 3.0)}); |
| 2319 | 2318 | try expectFmt("f64: 0x1.5555555555555p-2", "f64: {x}", .{@as(f64, 1.0 / 3.0)}); |
| 2319 | try expectFmt("f80: 0x1.5555555555555556p-2", "f80: {x}", .{@as(f80, 1.0 / 3.0)}); |
| 2320 | 2320 | try expectFmt("f128: 0x1.5555555555555555555555555555p-2", "f128: {x}", .{@as(f128, 1.0 / 3.0)}); |
| 2321 | 2321 | |
| 2322 | 2322 | try expectFmt("f16: 0x1p-14", "f16: {x}", .{math.floatMin(f16)}); |
| 2323 | 2323 | try expectFmt("f32: 0x1p-126", "f32: {x}", .{math.floatMin(f32)}); |
| 2324 | 2324 | try expectFmt("f64: 0x1p-1022", "f64: {x}", .{math.floatMin(f64)}); |
| 2325 | try expectFmt("f80: 0x1p-16382", "f80: {x}", .{math.floatMin(f80)}); |
| 2325 | 2326 | try expectFmt("f128: 0x1p-16382", "f128: {x}", .{math.floatMin(f128)}); |
| 2326 | 2327 | |
| 2327 | 2328 | try expectFmt("f16: 0x0.004p-14", "f16: {x}", .{math.floatTrueMin(f16)}); |
| 2328 | 2329 | try expectFmt("f32: 0x0.000002p-126", "f32: {x}", .{math.floatTrueMin(f32)}); |
| 2329 | 2330 | try expectFmt("f64: 0x0.0000000000001p-1022", "f64: {x}", .{math.floatTrueMin(f64)}); |
| 2331 | try expectFmt("f80: 0x0.0000000000000002p-16382", "f80: {x}", .{math.floatTrueMin(f80)}); |
| 2330 | 2332 | try expectFmt("f128: 0x0.0000000000000000000000000001p-16382", "f128: {x}", .{math.floatTrueMin(f128)}); |
| 2331 | 2333 | |
| 2332 | 2334 | try expectFmt("f16: 0x1.ffcp15", "f16: {x}", .{math.floatMax(f16)}); |
| 2333 | 2335 | try expectFmt("f32: 0x1.fffffep127", "f32: {x}", .{math.floatMax(f32)}); |
| 2334 | 2336 | try expectFmt("f64: 0x1.fffffffffffffp1023", "f64: {x}", .{math.floatMax(f64)}); |
| 2337 | try expectFmt("f80: 0x1.fffffffffffffffep16383", "f80: {x}", .{math.floatMax(f80)}); |
| 2335 | 2338 | try expectFmt("f128: 0x1.ffffffffffffffffffffffffffffp16383", "f128: {x}", .{math.floatMax(f128)}); |
| 2336 | 2339 | } |
| 2337 | 2340 | |
| ... | ... | @@ -2339,11 +2342,13 @@ test "float.hexadecimal.precision" { |
| 2339 | 2342 | try expectFmt("f16: 0x1.5p-2", "f16: {x:.1}", .{@as(f16, 1.0 / 3.0)}); |
| 2340 | 2343 | try expectFmt("f32: 0x1.555p-2", "f32: {x:.3}", .{@as(f32, 1.0 / 3.0)}); |
| 2341 | 2344 | try expectFmt("f64: 0x1.55555p-2", "f64: {x:.5}", .{@as(f64, 1.0 / 3.0)}); |
| 2342 | | try expectFmt("f128: 0x1.5555555p-2", "f128: {x:.7}", .{@as(f128, 1.0 / 3.0)}); |
| 2345 | try expectFmt("f80: 0x1.5555555p-2", "f80: {x:.7}", .{@as(f80, 1.0 / 3.0)}); |
| 2346 | try expectFmt("f128: 0x1.555555555p-2", "f128: {x:.9}", .{@as(f128, 1.0 / 3.0)}); |
| 2343 | 2347 | |
| 2344 | 2348 | try expectFmt("f16: 0x1.00000p0", "f16: {x:.5}", .{@as(f16, 1.0)}); |
| 2345 | 2349 | try expectFmt("f32: 0x1.00000p0", "f32: {x:.5}", .{@as(f32, 1.0)}); |
| 2346 | 2350 | try expectFmt("f64: 0x1.00000p0", "f64: {x:.5}", .{@as(f64, 1.0)}); |
| 2351 | try expectFmt("f80: 0x1.00000p0", "f80: {x:.5}", .{@as(f80, 1.0)}); |
| 2347 | 2352 | try expectFmt("f128: 0x1.00000p0", "f128: {x:.5}", .{@as(f128, 1.0)}); |
| 2348 | 2353 | } |
| 2349 | 2354 | |