// File: /workspace/github_cpp_makefile_star2_O2/mattn[P]wandbox-run/./json.hpp
// Function: nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer>::serializer::dump_float(double)
void dump_float(number_float_t x)
        {
            // special case for 0.0 and -0.0
            if (x == 0)
            {
                if (std::signbit(x))
                {
                    o.write("-0.0", 4);
                }
                else
                {
                    o.write("0.0", 3);
                }
                return;
            }

            // get number of digits for a text -> float -> text round-trip
            static constexpr auto d = std::numeric_limits<number_float_t>::digits10;

            // the actual conversion
            long len = snprintf(number_buffer.data(), number_buffer.size(),
                                "%.*g", d, x);

            // negative value indicates an error
            assert(len > 0);
            // check if buffer was large enough
            assert(static_cast<size_t>(len) < number_buffer.size());

            // erase thousands separator
            if (thousands_sep != '\0')
            {
                const auto end = std::remove(number_buffer.begin(),
                                             number_buffer.begin() + len,
                                             thousands_sep);
                std::fill(end, number_buffer.end(), '\0');
                assert((end - number_buffer.begin()) <= len);
                len = (end - number_buffer.begin());
            }

            // convert decimal point to '.'
            if (decimal_point != '\0' and decimal_point != '.')
            {
                for (auto& c : number_buffer)
                {
                    if (c == decimal_point)
                    {
                        c = '.';
                        break;
                    }
                }
            }

            o.write(number_buffer.data(), static_cast<std::streamsize>(len));

            // determine if need to append ".0"
            const bool value_is_int_like = std::none_of(number_buffer.begin(),
                                           number_buffer.begin() + len + 1,
                                           [](char c)
            {
                return c == '.' or c == 'e';
            });

            if (value_is_int_like)
            {
                o.write(".0", 2);
            }
        }

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %rbx
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x1ac5a
jp 0x1ac5a
movq %xmm0, %rax
movq (%rbx), %rdi
testq %rax, %rax
js 0x1ad1a
leaq 0xb1837(%rip), %rsi     # 0xcc48a
pushq $0x3
jmp 0x1ad23
leaq 0x8(%rbx), %r14
leaq 0xb1829(%rip), %rdx     # 0xcc48e
pushq $0x40
popq %rsi
pushq $0xf
popq %rcx
movq %r14, %rdi
movb $0x1, %al
callq 0x133a0
testl %eax, %eax
jle 0x1ad40
cmpl $0x40, %eax
jae 0x1ad5f
movslq %eax, %r15
cmpb $0x0, 0x50(%rbx)
je 0x1acc4
leaq 0x50(%rbx), %rdx
leaq (%r14,%r15), %rsi
movq %r14, %rdi
callq 0x1ae59
movq %rax, %r12
leaq 0x48(%rbx), %rdx
subq %rax, %rdx
je 0x1acb5
movq %r12, %rdi
xorl %esi, %esi
callq 0x13240
subq %r14, %r12
cmpq %r15, %r12
movq %r12, %r15
jg 0x1ad7e
movzbl 0x51(%rbx), %eax
testl %eax, %eax
je 0x1aceb
cmpl $0x2e, %eax
je 0x1aceb
xorl %ecx, %ecx
cmpq $0x40, %rcx
je 0x1aceb
leaq 0x1(%rcx), %rdx
cmpb %al, 0x8(%rbx,%rcx)
movq %rdx, %rcx
jne 0x1acd3
movb $0x2e, 0x7(%rbx,%rdx)
movq (%rbx), %rdi
movq %r14, %rsi
movq %r15, %rdx
callq 0x87610
leaq (%r14,%r15), %rsi
incq %rsi
movq %r14, %rdi
callq 0x1ae48
testb %al, %al
je 0x1ad34
movq (%rbx), %rdi
leaq 0xb1775(%rip), %rsi     # 0xcc48b
pushq $0x2
jmp 0x1ad23
leaq 0xb1768(%rip), %rsi     # 0xcc489
pushq $0x4
popq %rdx
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
jmp 0x87610
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
leaq 0xb042a(%rip), %rdi     # 0xcb171
leaq 0xaf5b7(%rip), %rsi     # 0xca305
leaq 0xb173e(%rip), %rcx     # 0xcc493
movl $0x1a0d, %edx           # imm = 0x1A0D
callq 0x13130
leaq 0xb187f(%rip), %rdi     # 0xcc5e5
leaq 0xaf598(%rip), %rsi     # 0xca305
leaq 0xb171f(%rip), %rcx     # 0xcc493
movl $0x1a0f, %edx           # imm = 0x1A0F
callq 0x13130
leaq 0xb1890(%rip), %rdi     # 0xcc615
leaq 0xaf579(%rip), %rsi     # 0xca305
leaq 0xb1700(%rip), %rcx     # 0xcc493
movl $0x1a18, %edx           # imm = 0x1A18
callq 0x13130
nop