authorgravatar for liam@bumblebee.net.nzMovingtoMars <liam@bumblebee.net.nz> 2016-01-29 21:19:21+13:00
committergravatar for liam@bumblebee.net.nzMovingtoMars <liam@bumblebee.net.nz> 2016-01-29 21:19:21+13:00
loga6c2b013fd814245bf7da9711b7c3cdaf9b83dcc
tree06afdcc50495994c4d21503136cf3d9e68156359
parent850f6d2d0266c0b502f0f0aa39ae32de469d03d9

remove some magic numbers from float printing


1 files changed, 8 insertions(+), 4 deletions(-)

std/std.zig+8-4
...@@ -244,6 +244,10 @@ pub fn buf_print_u64(out_buf: []u8, x: u64) -> isize {...@@ -244,6 +244,10 @@ pub fn buf_print_u64(out_buf: []u8, x: u64) -> isize {
244}244}
245245
246pub fn buf_print_f64(out_buf: []u8, x: f64, decimals: isize) -> isize {246pub fn buf_print_f64(out_buf: []u8, x: f64, decimals: isize) -> isize {
247 const numExpBits = 11;
248 const numRawSigBits = 52; // not including implicit 1 bit
249 const expBias = 1023;
250
247 var decs = decimals;251 var decs = decimals;
248 if (decs >= max_u64_base10_digits) {252 if (decs >= max_u64_base10_digits) {
249 decs = max_u64_base10_digits - 1;253 decs = max_u64_base10_digits - 1;
...@@ -277,8 +281,8 @@ pub fn buf_print_f64(out_buf: []u8, x: f64, decimals: isize) -> isize {...@@ -277,8 +281,8 @@ pub fn buf_print_f64(out_buf: []u8, x: f64, decimals: isize) -> isize {
277 len += 1;281 len += 1;
278 }282 }
279283
280 const rexponent: i64 = i64((bits >> 52) & ((1 << 11) - 1));284 const rexponent: i64 = i64((bits >> numRawSigBits) & ((1 << numExpBits) - 1));
281 const exponent = rexponent - 1023 - 52;285 const exponent = rexponent - expBias - numRawSigBits;
282286
283 if (rexponent == 0) {287 if (rexponent == 0) {
284 buf[len] = '0';288 buf[len] = '0';
...@@ -287,12 +291,12 @@ pub fn buf_print_f64(out_buf: []u8, x: f64, decimals: isize) -> isize {...@@ -287,12 +291,12 @@ pub fn buf_print_f64(out_buf: []u8, x: f64, decimals: isize) -> isize {
287 return len;291 return len;
288 }292 }
289293
290 const sig = (bits & ((1 << 52) - 1)) | (1 << 52);294 const sig = (bits & ((1 << numRawSigBits) - 1)) | (1 << numRawSigBits);
291295
292 if (exponent >= 0) {296 if (exponent >= 0) {
293 // number is an integer297 // number is an integer
294298
295 if (exponent >= 11) {299 if (exponent >= 64 - 53) {
296 // use XeX form300 // use XeX form
297301
298 // TODO support printing large floats302 // TODO support printing large floats