@@ -1563,17 +1563,23 @@ pub fn printFloatHexOptions(w: *Writer, value: anytype, options: std.fmt.Number)
1563
1563
}
1564
1564
1565
1565
pub fn printFloatHex (w : * Writer , value : anytype , case : std.fmt.Case , opt_precision : ? usize ) Error ! void {
1566
- if (std .math .signbit (value )) try w .writeByte ('-' );
1567
- if (std .math .isNan (value )) return w .writeAll (switch (case ) {
1566
+ const v = switch (@TypeOf (value )) {
1567
+ // comptime_float internally is a f128; this preserves precision.
1568
+ comptime_float = > @as (f128 , value ),
1569
+ else = > value ,
1570
+ };
1571
+
1572
+ if (std .math .signbit (v )) try w .writeByte ('-' );
1573
+ if (std .math .isNan (v )) return w .writeAll (switch (case ) {
1568
1574
.lower = > "nan" ,
1569
1575
.upper = > "NAN" ,
1570
1576
});
1571
- if (std .math .isInf (value )) return w .writeAll (switch (case ) {
1577
+ if (std .math .isInf (v )) return w .writeAll (switch (case ) {
1572
1578
.lower = > "inf" ,
1573
1579
.upper = > "INF" ,
1574
1580
});
1575
1581
1576
- const T = @TypeOf (value );
1582
+ const T = @TypeOf (v );
1577
1583
const TU = std .meta .Int (.unsigned , @bitSizeOf (T ));
1578
1584
1579
1585
const mantissa_bits = std .math .floatMantissaBits (T );
@@ -1583,7 +1589,7 @@ pub fn printFloatHex(w: *Writer, value: anytype, case: std.fmt.Case, opt_precisi
1583
1589
const exponent_mask = (1 << exponent_bits ) - 1 ;
1584
1590
const exponent_bias = (1 << (exponent_bits - 1 )) - 1 ;
1585
1591
1586
- const as_bits : TU = @bitCast (value );
1592
+ const as_bits : TU = @bitCast (v );
1587
1593
var mantissa = as_bits & mantissa_mask ;
1588
1594
var exponent : i32 = @as (u16 , @truncate ((as_bits >> mantissa_bits ) & exponent_mask ));
1589
1595
0 commit comments