|
1 | | - |
2 | | - |
3 | | -if VERSION < v"1.6.0-beta" |
4 | | - import Printf: ini_dec, fix_dec, ini_hex, ini_HEX |
5 | | - |
6 | | - function fp128_printf(out, d::Float128, flags::String, width::Int, precision::Int, c::Char, digits) |
7 | | - fmt_len = sizeof(flags)+4 |
8 | | - if width > 0 |
9 | | - fmt_len += ndigits(width) |
10 | | - end |
11 | | - if precision >= 0 |
12 | | - fmt_len += ndigits(precision)+1 |
13 | | - end |
14 | | - fmt = IOBuffer(maxsize=fmt_len) |
15 | | - print(fmt, '%') |
16 | | - print(fmt, flags) |
17 | | - if width > 0 |
18 | | - print(fmt, width) |
19 | | - end |
20 | | - if precision == 0 |
21 | | - print(fmt, '.') |
22 | | - print(fmt, '0') |
23 | | - elseif precision > 0 |
24 | | - print(fmt, '.') |
25 | | - print(fmt, precision) |
26 | | - end |
27 | | - print(fmt, 'Q') |
28 | | - print(fmt, c) |
29 | | - write(fmt, UInt8(0)) |
30 | | - printf_fmt = take!(fmt) |
31 | | - @assert length(printf_fmt) == fmt_len |
32 | | - bufsiz = length(digits) |
33 | | - lng = @ccall(libquadmath.quadmath_snprintf(digits::Ptr{UInt8}, bufsiz::Csize_t, printf_fmt::Ptr{UInt8}, d::(Cfloat128...))::Cint) |
34 | | - lng > 0 || error("invalid printf formatting for Float128") |
35 | | - unsafe_write(out, pointer(digits), min(lng, bufsiz-1)) |
36 | | - return (false, ()) |
37 | | - end |
38 | | - |
39 | | - if VERSION < v"1.1" |
40 | | - using Base.Grisu: DIGITSs |
41 | | - fix_dec(out, d::Float128, flags::String, width::Int, precision::Int, c::Char) = fp128_printf(out, d, flags, width, precision, c, DIGITSs[Threads.threadid()]) |
42 | | - ini_dec(out, d::Float128, ndigits::Int, flags::String, width::Int, precision::Int, c::Char) = fp128_printf(out, d, flags, width, precision, c, DIGITSs[Threads.threadid()]) |
43 | | - ini_hex(out, d::Float128, ndigits::Int, flags::String, width::Int, precision::Int, c::Char) = fp128_printf(out, d, flags, width, precision, c, DIGITSs[Threads.threadid()]) |
44 | | - ini_HEX(out, d::Float128, ndigits::Int, flags::String, width::Int, precision::Int, c::Char) = fp128_printf(out, d, flags, width, precision, c, DIGITSs[Threads.threadid()]) |
45 | | - ini_hex(out, d::Float128, flags::String, width::Int, precision::Int, c::Char) = fp128_printf(out, d, flags, width, precision, c, DIGITSs[Threads.threadid()]) |
46 | | - ini_HEX(out, d::Float128, flags::String, width::Int, precision::Int, c::Char) = fp128_printf(out, d, flags, width, precision, c, DIGITSs[Threads.threadid()]) |
47 | | - else |
48 | | - fix_dec(out, d::Float128, flags::String, width::Int, precision::Int, c::Char, digits) = fp128_printf(out, d, flags, width, precision, c, digits) |
49 | | - ini_dec(out, d::Float128, ndigits::Int, flags::String, width::Int, precision::Int, c::Char, digits) = fp128_printf(out, d, flags, width, precision, c, digits) |
50 | | - ini_hex(out, d::Float128, ndigits::Int, flags::String, width::Int, precision::Int, c::Char, digits) = fp128_printf(out, d, flags, width, precision, c, digits) |
51 | | - ini_HEX(out, d::Float128, ndigits::Int, flags::String, width::Int, precision::Int, c::Char, digits) = fp128_printf(out, d, flags, width, precision, c, digits) |
52 | | - ini_hex(out, d::Float128, flags::String, width::Int, precision::Int, c::Char, digits) = fp128_printf(out, d, flags, width, precision, c, digits) |
53 | | - ini_HEX(out, d::Float128, flags::String, width::Int, precision::Int, c::Char, digits) = fp128_printf(out, d, flags, width, precision, c, digits) |
54 | | - end |
55 | | -else |
56 | | - # Julia v1.6+ |
57 | | - # placeholder |
58 | | - import Printf |
59 | | - Printf.tofloat(x::Float128) = BigFloat(x) |
60 | | -end |
| 1 | +# placeholder |
| 2 | +import Printf |
| 3 | +Printf.tofloat(x::Float128) = BigFloat(x) |
0 commit comments