| ... | @@ -108,20 +108,6 @@ pub struct OutStream { | ... | @@ -108,20 +108,6 @@ pub struct OutStream { |
| 108 | return amt_printed; | 108 | return amt_printed; |
| 109 | } | 109 | } |
| 110 | | 110 | |
| 111 | pub fn print_f64(os: &OutStream, x: f64) -> %isize { | | |
| 112 | if (os.index + max_f64_digits >= os.buffer.len) { | | |
| 113 | %return os.flush(); | | |
| 114 | } | | |
| 115 | const amt_printed = buf_print_f64(os.buffer[os.index...], x); | | |
| 116 | os.index += amt_printed; | | |
| 117 | | | |
| 118 | if (!os.buffered) { | | |
| 119 | %return os.flush(); | | |
| 120 | } | | |
| 121 | | | |
| 122 | return amt_printed; | | |
| 123 | } | | |
| 124 | | | |
| 125 | pub fn flush(os: &OutStream) -> %void { | 111 | pub fn flush(os: &OutStream) -> %void { |
| 126 | const amt_written = write(os.fd, os.buffer.ptr, os.index); | 112 | const amt_written = write(os.fd, os.buffer.ptr, os.index); |
| 127 | os.index = 0; | 113 | os.index = 0; |
| ... | @@ -243,67 +229,6 @@ pub fn buf_print_u64(out_buf: []u8, x: u64) -> isize { | ... | @@ -243,67 +229,6 @@ pub fn buf_print_u64(out_buf: []u8, x: u64) -> isize { |
| 243 | return len; | 229 | return len; |
| 244 | } | 230 | } |
| 245 | | 231 | |
| 246 | pub fn buf_print_f64(out_buf: []u8, x: f64) -> isize { | | |
| 247 | if (x == f64_get_pos_inf()) { | | |
| 248 | const buf2 = "+Inf"; | | |
| 249 | @memcpy(&out_buf[0], &buf2[0], buf2.len); | | |
| 250 | return 4; | | |
| 251 | } else if (x == f64_get_neg_inf()) { | | |
| 252 | const buf2 = "-Inf"; | | |
| 253 | @memcpy(&out_buf[0], &buf2[0], buf2.len); | | |
| 254 | return 4; | | |
| 255 | } else if (f64_is_nan(x)) { | | |
| 256 | const buf2 = "NaN"; | | |
| 257 | @memcpy(&out_buf[0], &buf2[0], buf2.len); | | |
| 258 | return 3; | | |
| 259 | } | | |
| 260 | | | |
| 261 | var buf: [max_f64_digits]u8 = undefined; | | |
| 262 | | | |
| 263 | var len: isize = 0; | | |
| 264 | | | |
| 265 | // 1 sign bit | | |
| 266 | // 11 exponent bits | | |
| 267 | // 52 significand bits (+ 1 implicit always non-zero bit) | | |
| 268 | | | |
| 269 | const bits = f64_to_bits(x); | | |
| 270 | if (bits & (1 << 63) != 0) { | | |
| 271 | buf[0] = '-'; | | |
| 272 | len += 1; | | |
| 273 | } | | |
| 274 | | | |
| 275 | const rexponent: i64 = i64((bits >> 52) & ((1 << 11) - 1)); | | |
| 276 | const exponent = rexponent - 1023 - 52; | | |
| 277 | /*%%stdout.printf("exponent: "); | | |
| 278 | %%stdout.print_i64(exponent); | | |
| 279 | %%stdout.printf("\n");*/ | | |
| 280 | | | |
| 281 | if (rexponent == 0) { | | |
| 282 | buf[len] = '0'; | | |
| 283 | len += 1; | | |
| 284 | @memcpy(&out_buf[0], &buf[0], len); | | |
| 285 | return len; | | |
| 286 | } | | |
| 287 | | | |
| 288 | const sig = (bits & ((1 << 52) - 1)) | (1 << 52); | | |
| 289 | /*%%stdout.printf("significand: "); | | |
| 290 | %%stdout.print_u64(sig); | | |
| 291 | %%stdout.printf("\n");*/ | | |
| 292 | | | |
| 293 | len += buf_print_u64(buf[len...], sig); | | |
| 294 | buf[len] = '*'; | | |
| 295 | len += 1; | | |
| 296 | buf[len] = '2'; | | |
| 297 | len += 1; | | |
| 298 | buf[len] = '^'; | | |
| 299 | len += 1; | | |
| 300 | len += buf_print_i64(buf[len...], exponent); | | |
| 301 | | | |
| 302 | @memcpy(&out_buf[0], &buf[0], len); | | |
| 303 | | | |
| 304 | len | | |
| 305 | } | | |
| 306 | | | |
| 307 | fn min_isize(x: isize, y: isize) -> isize { | 232 | fn min_isize(x: isize, y: isize) -> isize { |
| 308 | if (x < y) x else y | 233 | if (x < y) x else y |
| 309 | } | 234 | } |