Skip to content

Commit 72a3ed4

Browse files
authored
Merge pull request #8433 from drinkcat/od-f16-f32-width
od: Switch f16 print to width=15/16, precision=8
2 parents 86dc293 + 991ba21 commit 72a3ed4

File tree

2 files changed

+111
-111
lines changed

2 files changed

+111
-111
lines changed

src/uu/od/src/prn_float.rs

Lines changed: 98 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ use crate::formatter_item_info::{FormatWriter, FormatterItemInfo};
99

1010
pub static FORMAT_ITEM_F16: FormatterItemInfo = FormatterItemInfo {
1111
byte_size: 2,
12-
print_width: 10,
12+
print_width: 16,
1313
formatter: FormatWriter::FloatWriter(format_item_f16),
1414
};
1515

1616
pub static FORMAT_ITEM_F32: FormatterItemInfo = FormatterItemInfo {
1717
byte_size: 4,
18-
print_width: 15,
18+
print_width: 16,
1919
formatter: FormatWriter::FloatWriter(format_item_f32),
2020
};
2121

@@ -27,7 +27,7 @@ pub static FORMAT_ITEM_F64: FormatterItemInfo = FormatterItemInfo {
2727

2828
pub static FORMAT_ITEM_BF16: FormatterItemInfo = FormatterItemInfo {
2929
byte_size: 2,
30-
print_width: 15,
30+
print_width: 16,
3131
formatter: FormatWriter::BFloatWriter(format_item_bf16),
3232
};
3333

@@ -75,13 +75,13 @@ pub fn format_item_bf16(f: f64) -> String {
7575
}
7676

7777
fn format_f16(f: f16) -> String {
78-
format_float(f64::from(f), 9, 4)
78+
format_float(f64::from(f), 15, 8)
7979
}
8080

8181
/// formats float with 8 significant digits, eg 12345678 or -1.2345678e+12
8282
/// always returns a string of 14 characters
8383
fn format_f32(f: f32) -> String {
84-
let width: usize = 14;
84+
let width: usize = 15;
8585
let precision: usize = 8;
8686

8787
if f.classify() == FpCategory::Subnormal {
@@ -128,78 +128,78 @@ fn format_float(f: f64, width: usize, precision: usize) -> String {
128128
#[allow(clippy::excessive_precision)]
129129
#[allow(clippy::cognitive_complexity)]
130130
fn test_format_f32() {
131-
assert_eq!(format_f32(1.0), " 1.0000000");
132-
assert_eq!(format_f32(9.999_999_0), " 9.9999990");
133-
assert_eq!(format_f32(10.0), " 10.000000");
134-
assert_eq!(format_f32(99.999_977), " 99.999977");
135-
assert_eq!(format_f32(99.999_992), " 99.999992");
136-
assert_eq!(format_f32(100.0), " 100.00000");
137-
assert_eq!(format_f32(999.99994), " 999.99994");
138-
assert_eq!(format_f32(1000.0), " 1000.0000");
139-
assert_eq!(format_f32(9999.9990), " 9999.9990");
140-
assert_eq!(format_f32(10000.0), " 10000.000");
141-
assert_eq!(format_f32(99999.992), " 99999.992");
142-
assert_eq!(format_f32(100_000.0), " 100000.00");
143-
assert_eq!(format_f32(999_999.94), " 999999.94");
144-
assert_eq!(format_f32(1_000_000.0), " 1000000.0");
145-
assert_eq!(format_f32(9_999_999.0), " 9999999.0");
146-
assert_eq!(format_f32(10_000_000.0), " 10000000");
147-
assert_eq!(format_f32(99_999_992.0), " 99999992");
148-
assert_eq!(format_f32(100_000_000.0), " 1.0000000e+8");
149-
assert_eq!(format_f32(9.999_999_4e8), " 9.9999994e+8");
150-
assert_eq!(format_f32(1.0e9), " 1.0000000e+9");
151-
assert_eq!(format_f32(9.999_999_0e9), " 9.9999990e+9");
152-
assert_eq!(format_f32(1.0e10), " 1.0000000e+10");
153-
154-
assert_eq!(format_f32(0.1), " 0.10000000");
155-
assert_eq!(format_f32(0.999_999_94), " 0.99999994");
156-
assert_eq!(format_f32(0.010_000_001), " 1.0000001e-2");
157-
assert_eq!(format_f32(0.099_999_994), " 9.9999994e-2");
158-
assert_eq!(format_f32(0.001), " 1.0000000e-3");
159-
assert_eq!(format_f32(0.009_999_999_8), " 9.9999998e-3");
160-
161-
assert_eq!(format_f32(-1.0), " -1.0000000");
162-
assert_eq!(format_f32(-9.999_999_0), " -9.9999990");
163-
assert_eq!(format_f32(-10.0), " -10.000000");
164-
assert_eq!(format_f32(-99.999_977), " -99.999977");
165-
assert_eq!(format_f32(-99.999_992), " -99.999992");
166-
assert_eq!(format_f32(-100.0), " -100.00000");
167-
assert_eq!(format_f32(-999.99994), " -999.99994");
168-
assert_eq!(format_f32(-1000.0), " -1000.0000");
169-
assert_eq!(format_f32(-9999.9990), " -9999.9990");
170-
assert_eq!(format_f32(-10000.0), " -10000.000");
171-
assert_eq!(format_f32(-99999.992), " -99999.992");
172-
assert_eq!(format_f32(-100_000.0), " -100000.00");
173-
assert_eq!(format_f32(-999_999.94), " -999999.94");
174-
assert_eq!(format_f32(-1_000_000.0), " -1000000.0");
175-
assert_eq!(format_f32(-9_999_999.0), " -9999999.0");
176-
assert_eq!(format_f32(-10_000_000.0), " -10000000");
177-
assert_eq!(format_f32(-99_999_992.0), " -99999992");
178-
assert_eq!(format_f32(-100_000_000.0), " -1.0000000e+8");
179-
assert_eq!(format_f32(-9.999_999_4e8), " -9.9999994e+8");
180-
assert_eq!(format_f32(-1.0e9), " -1.0000000e+9");
181-
assert_eq!(format_f32(-9.999_999_0e9), " -9.9999990e+9");
182-
assert_eq!(format_f32(-1.0e10), "-1.0000000e+10");
183-
184-
assert_eq!(format_f32(-0.1), " -0.10000000");
185-
assert_eq!(format_f32(-0.999_999_94), " -0.99999994");
186-
assert_eq!(format_f32(-0.010_000_001), " -1.0000001e-2");
187-
assert_eq!(format_f32(-0.099_999_994), " -9.9999994e-2");
188-
assert_eq!(format_f32(-0.001), " -1.0000000e-3");
189-
assert_eq!(format_f32(-0.009_999_999_8), " -9.9999998e-3");
190-
191-
assert_eq!(format_f32(3.402_823_3e38), " 3.4028233e+38");
192-
assert_eq!(format_f32(-3.402_823_3e38), "-3.4028233e+38");
193-
assert_eq!(format_f32(-1.166_310_8e-38), "-1.1663108e-38");
194-
assert_eq!(format_f32(-4.701_977_1e-38), "-4.7019771e-38");
195-
assert_eq!(format_f32(1e-45), " 1e-45");
196-
197-
assert_eq!(format_f32(-3.402_823_466e+38), "-3.4028235e+38");
198-
assert_eq!(format_f32(f32::NAN), " NaN");
199-
assert_eq!(format_f32(f32::INFINITY), " inf");
200-
assert_eq!(format_f32(f32::NEG_INFINITY), " -inf");
201-
assert_eq!(format_f32(-0.0), " -0");
202-
assert_eq!(format_f32(0.0), " 0");
131+
assert_eq!(format_f32(1.0), " 1.0000000");
132+
assert_eq!(format_f32(9.999_999_0), " 9.9999990");
133+
assert_eq!(format_f32(10.0), " 10.000000");
134+
assert_eq!(format_f32(99.999_977), " 99.999977");
135+
assert_eq!(format_f32(99.999_992), " 99.999992");
136+
assert_eq!(format_f32(100.0), " 100.00000");
137+
assert_eq!(format_f32(999.99994), " 999.99994");
138+
assert_eq!(format_f32(1000.0), " 1000.0000");
139+
assert_eq!(format_f32(9999.9990), " 9999.9990");
140+
assert_eq!(format_f32(10000.0), " 10000.000");
141+
assert_eq!(format_f32(99999.992), " 99999.992");
142+
assert_eq!(format_f32(100_000.0), " 100000.00");
143+
assert_eq!(format_f32(999_999.94), " 999999.94");
144+
assert_eq!(format_f32(1_000_000.0), " 1000000.0");
145+
assert_eq!(format_f32(9_999_999.0), " 9999999.0");
146+
assert_eq!(format_f32(10_000_000.0), " 10000000");
147+
assert_eq!(format_f32(99_999_992.0), " 99999992");
148+
assert_eq!(format_f32(100_000_000.0), " 1.0000000e+8");
149+
assert_eq!(format_f32(9.999_999_4e8), " 9.9999994e+8");
150+
assert_eq!(format_f32(1.0e9), " 1.0000000e+9");
151+
assert_eq!(format_f32(9.999_999_0e9), " 9.9999990e+9");
152+
assert_eq!(format_f32(1.0e10), " 1.0000000e+10");
153+
154+
assert_eq!(format_f32(0.1), " 0.10000000");
155+
assert_eq!(format_f32(0.999_999_94), " 0.99999994");
156+
assert_eq!(format_f32(0.010_000_001), " 1.0000001e-2");
157+
assert_eq!(format_f32(0.099_999_994), " 9.9999994e-2");
158+
assert_eq!(format_f32(0.001), " 1.0000000e-3");
159+
assert_eq!(format_f32(0.009_999_999_8), " 9.9999998e-3");
160+
161+
assert_eq!(format_f32(-1.0), " -1.0000000");
162+
assert_eq!(format_f32(-9.999_999_0), " -9.9999990");
163+
assert_eq!(format_f32(-10.0), " -10.000000");
164+
assert_eq!(format_f32(-99.999_977), " -99.999977");
165+
assert_eq!(format_f32(-99.999_992), " -99.999992");
166+
assert_eq!(format_f32(-100.0), " -100.00000");
167+
assert_eq!(format_f32(-999.99994), " -999.99994");
168+
assert_eq!(format_f32(-1000.0), " -1000.0000");
169+
assert_eq!(format_f32(-9999.9990), " -9999.9990");
170+
assert_eq!(format_f32(-10000.0), " -10000.000");
171+
assert_eq!(format_f32(-99999.992), " -99999.992");
172+
assert_eq!(format_f32(-100_000.0), " -100000.00");
173+
assert_eq!(format_f32(-999_999.94), " -999999.94");
174+
assert_eq!(format_f32(-1_000_000.0), " -1000000.0");
175+
assert_eq!(format_f32(-9_999_999.0), " -9999999.0");
176+
assert_eq!(format_f32(-10_000_000.0), " -10000000");
177+
assert_eq!(format_f32(-99_999_992.0), " -99999992");
178+
assert_eq!(format_f32(-100_000_000.0), " -1.0000000e+8");
179+
assert_eq!(format_f32(-9.999_999_4e8), " -9.9999994e+8");
180+
assert_eq!(format_f32(-1.0e9), " -1.0000000e+9");
181+
assert_eq!(format_f32(-9.999_999_0e9), " -9.9999990e+9");
182+
assert_eq!(format_f32(-1.0e10), " -1.0000000e+10");
183+
184+
assert_eq!(format_f32(-0.1), " -0.10000000");
185+
assert_eq!(format_f32(-0.999_999_94), " -0.99999994");
186+
assert_eq!(format_f32(-0.010_000_001), " -1.0000001e-2");
187+
assert_eq!(format_f32(-0.099_999_994), " -9.9999994e-2");
188+
assert_eq!(format_f32(-0.001), " -1.0000000e-3");
189+
assert_eq!(format_f32(-0.009_999_999_8), " -9.9999998e-3");
190+
191+
assert_eq!(format_f32(3.402_823_3e38), " 3.4028233e+38");
192+
assert_eq!(format_f32(-3.402_823_3e38), " -3.4028233e+38");
193+
assert_eq!(format_f32(-1.166_310_8e-38), " -1.1663108e-38");
194+
assert_eq!(format_f32(-4.701_977_1e-38), " -4.7019771e-38");
195+
assert_eq!(format_f32(1e-45), " 1e-45");
196+
197+
assert_eq!(format_f32(-3.402_823_466e+38), " -3.4028235e+38");
198+
assert_eq!(format_f32(f32::NAN), " NaN");
199+
assert_eq!(format_f32(f32::INFINITY), " inf");
200+
assert_eq!(format_f32(f32::NEG_INFINITY), " -inf");
201+
assert_eq!(format_f32(-0.0), " -0");
202+
assert_eq!(format_f32(0.0), " 0");
203203
}
204204

205205
#[test]
@@ -238,25 +238,25 @@ fn test_format_f64() {
238238
#[test]
239239
#[allow(clippy::cognitive_complexity)]
240240
fn test_format_f16() {
241-
assert_eq!(format_f16(f16::from_bits(0x8400u16)), "-6.104e-5");
242-
assert_eq!(format_f16(f16::from_bits(0x8401u16)), "-6.109e-5");
243-
assert_eq!(format_f16(f16::from_bits(0x8402u16)), "-6.115e-5");
244-
assert_eq!(format_f16(f16::from_bits(0x8403u16)), "-6.121e-5");
245-
246-
assert_eq!(format_f16(f16::from_f32(1.0)), " 1.000");
247-
assert_eq!(format_f16(f16::from_f32(10.0)), " 10.00");
248-
assert_eq!(format_f16(f16::from_f32(100.0)), " 100.0");
249-
assert_eq!(format_f16(f16::from_f32(1000.0)), " 1000");
250-
assert_eq!(format_f16(f16::from_f32(10000.0)), " 1.000e+4");
251-
252-
assert_eq!(format_f16(f16::from_f32(-0.2)), " -0.2000");
253-
assert_eq!(format_f16(f16::from_f32(-0.02)), "-2.000e-2");
254-
255-
assert_eq!(format_f16(f16::MIN_POSITIVE_SUBNORMAL), " 5.960e-8");
256-
assert_eq!(format_f16(f16::MIN), "-6.550e+4");
257-
assert_eq!(format_f16(f16::NAN), " NaN");
258-
assert_eq!(format_f16(f16::INFINITY), " inf");
259-
assert_eq!(format_f16(f16::NEG_INFINITY), " -inf");
260-
assert_eq!(format_f16(f16::NEG_ZERO), " -0");
261-
assert_eq!(format_f16(f16::ZERO), " 0");
241+
assert_eq!(format_f16(f16::from_bits(0x8400u16)), " -6.1035156e-5");
242+
assert_eq!(format_f16(f16::from_bits(0x8401u16)), " -6.1094761e-5");
243+
assert_eq!(format_f16(f16::from_bits(0x8402u16)), " -6.1154366e-5");
244+
assert_eq!(format_f16(f16::from_bits(0x8403u16)), " -6.1213970e-5");
245+
246+
assert_eq!(format_f16(f16::from_f32(1.0)), " 1.0000000");
247+
assert_eq!(format_f16(f16::from_f32(10.0)), " 10.000000");
248+
assert_eq!(format_f16(f16::from_f32(100.0)), " 100.00000");
249+
assert_eq!(format_f16(f16::from_f32(1000.0)), " 1000.0000");
250+
assert_eq!(format_f16(f16::from_f32(10000.0)), " 10000.000");
251+
252+
assert_eq!(format_f16(f16::from_f32(-0.2)), " -0.19995117");
253+
assert_eq!(format_f16(f16::from_f32(-0.02)), " -2.0004272e-2");
254+
255+
assert_eq!(format_f16(f16::MIN_POSITIVE_SUBNORMAL), " 5.9604645e-8");
256+
assert_eq!(format_f16(f16::MIN), " -65504.000");
257+
assert_eq!(format_f16(f16::NAN), " NaN");
258+
assert_eq!(format_f16(f16::INFINITY), " inf");
259+
assert_eq!(format_f16(f16::NEG_INFINITY), " -inf");
260+
assert_eq!(format_f16(f16::NEG_ZERO), " -0");
261+
assert_eq!(format_f16(f16::ZERO), " 0");
262262
}

tests/by-util/test_od.rs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -206,8 +206,8 @@ fn test_f16() {
206206
]; // 0x8400 -6.104e-5
207207
let expected_output = unindent(
208208
"
209-
0000000 1.000 0 -0 inf
210-
0000010 -inf NaN -6.104e-5
209+
0000000 1.0000000 0 -0 inf
210+
0000010 -inf NaN -6.1035156e-5
211211
0000016
212212
",
213213
);
@@ -231,11 +231,11 @@ fn test_fh() {
231231
0x00, 0xfc, // 0xFC00 -Inf
232232
0x00, 0xfe, // 0xFE00 NaN
233233
0x00, 0x84,
234-
]; // 0x8400 -6.104e-5
234+
]; // 0x8400 -6.1035156e-5
235235
let expected_output = unindent(
236236
"
237-
0000000 1.000 0 -0 inf
238-
0000010 -inf NaN -6.104e-5
237+
0000000 1.0000000 0 -0 inf
238+
0000010 -inf NaN -6.1035156e-5
239239
0000016
240240
",
241241
);
@@ -262,8 +262,8 @@ fn test_fb() {
262262
]; // -6.1035156e-5
263263
let expected_output = unindent(
264264
"
265-
0000000 1.0000000 0 -0 inf
266-
0000010 -inf NaN -6.1035156e-5
265+
0000000 1.0000000 0 -0 inf
266+
0000010 -inf NaN -6.1035156e-5
267267
0000016
268268
",
269269
);
@@ -290,8 +290,8 @@ fn test_f32() {
290290
]; // 0x807f0000 -1.1663108E-38
291291
let expected_output = unindent(
292292
"
293-
0000000 -1.2345679 12345678 -9.8765427e+37 -0
294-
0000020 NaN 1e-40 -1.1663108e-38
293+
0000000 -1.2345679 12345678 -9.8765427e+37 -0
294+
0000020 NaN 1e-40 -1.1663108e-38
295295
0000034
296296
",
297297
);
@@ -467,10 +467,10 @@ fn test_big_endian() {
467467

468468
let expected_output = unindent(
469469
"
470-
0000000 -2.0000000000000000
471-
-2.0000000 0
472-
c0000000 00000000
473-
c000 0000 0000 0000
470+
0000000 -2.0000000000000000
471+
-2.0000000 0
472+
c0000000 00000000
473+
c000 0000 0000 0000
474474
0000010
475475
",
476476
);

0 commit comments

Comments
 (0)