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 {
244244}
245245
246246pub 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
247251 var decs = decimals;
248252 if (decs >= max_u64_base10_digits) {
249253 decs = max_u64_base10_digits - 1;
......@@ -277,8 +281,8 @@ pub fn buf_print_f64(out_buf: []u8, x: f64, decimals: isize) -> isize {
277281 len += 1;
278282 }
279283
280 const rexponent: i64 = i64((bits >> 52) & ((1 << 11) - 1));
281 const exponent = rexponent - 1023 - 52;
284 const rexponent: i64 = i64((bits >> numRawSigBits) & ((1 << numExpBits) - 1));
285 const exponent = rexponent - expBias - numRawSigBits;
282286
283287 if (rexponent == 0) {
284288 buf[len] = '0';
......@@ -287,12 +291,12 @@ pub fn buf_print_f64(out_buf: []u8, x: f64, decimals: isize) -> isize {
287291 return len;
288292 }
289293
290 const sig = (bits & ((1 << 52) - 1)) | (1 << 52);
294 const sig = (bits & ((1 << numRawSigBits) - 1)) | (1 << numRawSigBits);
291295
292296 if (exponent >= 0) {
293297 // number is an integer
294298
295 if (exponent >= 11) {
299 if (exponent >= 64 - 53) {
296300 // use XeX form
297301
298302 // TODO support printing large floats