// File: /workspace/github_cpp_makefile_star2_O1/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 0x1bab1
jp 0x1bab1
movq %xmm0, %rax
movq (%rbx), %rdi
testq %rax, %rax
js 0x1bb3f
leaq 0xb19e3(%rip), %rsi     # 0xcd48a
movl $0x3, %edx
jmp 0x1bb91
leaq 0x8(%rbx), %r14
leaq 0xb19d2(%rip), %rdx     # 0xcd48e
movl $0x40, %esi
movq %r14, %rdi
movl $0xf, %ecx
movb $0x1, %al
callq 0x133a0
testl %eax, %eax
jle 0x1bba1
cmpl $0x40, %eax
jae 0x1bbc0
movslq %eax, %r15
cmpb $0x0, 0x50(%rbx)
je 0x1bb1f
leaq 0x50(%rbx), %rdx
leaq (%r14,%r15), %rsi
movq %r14, %rdi
callq 0x1bc79
movq %rax, %r12
leaq 0x48(%rbx), %rdx
subq %rax, %rdx
je 0x1bb10
movq %r12, %rdi
xorl %esi, %esi
callq 0x13240
subq %r14, %r12
cmpq %r15, %r12
movq %r12, %r15
jg 0x1bbdf
movzbl 0x51(%rbx), %eax
testl %eax, %eax
je 0x1bb52
cmpl $0x2e, %eax
je 0x1bb52
xorl %ecx, %ecx
cmpb %al, 0x8(%rbx,%rcx)
je 0x1bb4d
incq %rcx
cmpq $0x40, %rcx
jne 0x1bb2e
jmp 0x1bb52
leaq 0xb1943(%rip), %rsi     # 0xcd489
movl $0x4, %edx
jmp 0x1bb91
movb $0x2e, 0x8(%rbx,%rcx)
movq (%rbx), %rdi
movq %r14, %rsi
movq %r15, %rdx
callq 0x884a0
addq %r14, %r15
incq %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x1bd4a
cmpq %r15, %rax
je 0x1bb82
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
movq (%rbx), %rdi
leaq 0xb18ff(%rip), %rsi     # 0xcd48b
movl $0x2, %edx
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
jmp 0x884a0
leaq 0xb05c9(%rip), %rdi     # 0xcc171
leaq 0xaf756(%rip), %rsi     # 0xcb305
leaq 0xb18dd(%rip), %rcx     # 0xcd493
movl $0x1a0d, %edx           # imm = 0x1A0D
callq 0x13130
leaq 0xb1a1e(%rip), %rdi     # 0xcd5e5
leaq 0xaf737(%rip), %rsi     # 0xcb305
leaq 0xb18be(%rip), %rcx     # 0xcd493
movl $0x1a0f, %edx           # imm = 0x1A0F
callq 0x13130
leaq 0xb1a2f(%rip), %rdi     # 0xcd615
leaq 0xaf718(%rip), %rsi     # 0xcb305
leaq 0xb189f(%rip), %rcx     # 0xcd493
movl $0x1a18, %edx           # imm = 0x1A18
callq 0x13130