// File: 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 %rbp
movq %rsp, %rbp
subq $0xa0, %rsp
movq %rdi, -0x8(%rbp)
movsd %xmm0, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x58(%rbp)
movsd -0x10(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x238e3
jp 0x238e3
movsd -0x10(%rbp), %xmm0
callq 0x23fb0
testb $0x1, %al
jne 0x238ac
jmp 0x238c6
movq -0x58(%rbp), %rax
movq (%rax), %rdi
leaq 0xb375c(%rip), %rsi     # 0xd7016
movl $0x4, %edx
callq 0x91840
jmp 0x238de
movq -0x58(%rbp), %rax
movq (%rax), %rdi
leaq 0xb3743(%rip), %rsi     # 0xd7017
movl $0x3, %edx
callq 0x91840
jmp 0x23b78
movq -0x58(%rbp), %rdi
addq $0x8, %rdi
callq 0x211f0
movq -0x58(%rbp), %rdi
movq %rax, -0x60(%rbp)
addq $0x8, %rdi
callq 0x21150
movq -0x60(%rbp), %rdi
movq %rax, %rsi
movsd -0x10(%rbp), %xmm0
leaq 0xb3707(%rip), %rdx     # 0xd701b
movl $0xf, %ecx
movb $0x1, %al
callq 0x133a0
cltq
movq %rax, -0x18(%rbp)
cmpq $0x0, -0x18(%rbp)
jle 0x2392f
jmp 0x2394e
leaq 0xb2250(%rip), %rdi     # 0xd5b86
leaq 0xb0da4(%rip), %rsi     # 0xd46e1
movl $0x1a0d, %edx           # imm = 0x1A0D
leaq 0xb36d7(%rip), %rcx     # 0xd7020
callq 0x13130
movq -0x58(%rbp), %rdi
movq -0x18(%rbp), %rax
movq %rax, -0x68(%rbp)
addq $0x8, %rdi
callq 0x21150
movq %rax, %rcx
movq -0x68(%rbp), %rax
cmpq %rcx, %rax
jae 0x23971
jmp 0x23990
leaq 0xb37fa(%rip), %rdi     # 0xd7172
leaq 0xb0d62(%rip), %rsi     # 0xd46e1
movl $0x1a0f, %edx           # imm = 0x1A0F
leaq 0xb3695(%rip), %rcx     # 0xd7020
callq 0x13130
movq -0x58(%rbp), %rax
movsbl 0x50(%rax), %eax
cmpl $0x0, %eax
je 0x23a73
movq -0x58(%rbp), %rdi
addq $0x8, %rdi
callq 0x211a0
movq -0x58(%rbp), %rdi
movq %rax, -0x80(%rbp)
addq $0x8, %rdi
callq 0x211a0
movq -0x80(%rbp), %rdi
movq -0x58(%rbp), %rdx
movq %rax, %rsi
addq -0x18(%rbp), %rsi
addq $0x50, %rdx
callq 0x23fd0
movq -0x58(%rbp), %rdi
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x78(%rbp)
addq $0x8, %rdi
callq 0x24050
movq -0x78(%rbp), %rdi
movq %rax, %rsi
movb $0x0, -0x21(%rbp)
leaq -0x21(%rbp), %rdx
callq 0x24020
movq -0x58(%rbp), %rdi
movq -0x20(%rbp), %rax
movq %rax, -0x70(%rbp)
addq $0x8, %rdi
callq 0x211a0
movq %rax, %rcx
movq -0x70(%rbp), %rax
subq %rcx, %rax
cmpq -0x18(%rbp), %rax
jg 0x23a2b
jmp 0x23a4a
leaq 0xb3770(%rip), %rdi     # 0xd71a2
leaq 0xb0ca8(%rip), %rsi     # 0xd46e1
movl $0x1a18, %edx           # imm = 0x1A18
leaq 0xb35db(%rip), %rcx     # 0xd7020
callq 0x13130
movq -0x58(%rbp), %rdi
movq -0x20(%rbp), %rax
movq %rax, -0x88(%rbp)
addq $0x8, %rdi
callq 0x211a0
movq %rax, %rcx
movq -0x88(%rbp), %rax
subq %rcx, %rax
movq %rax, -0x18(%rbp)
movq -0x58(%rbp), %rax
movsbl 0x51(%rax), %eax
cmpl $0x0, %eax
je 0x23af3
movq -0x58(%rbp), %rax
movsbl 0x51(%rax), %eax
cmpl $0x2e, %eax
je 0x23af3
movq -0x58(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rdi
callq 0x211a0
movq %rax, -0x38(%rbp)
movq -0x30(%rbp), %rdi
callq 0x24050
movq %rax, -0x40(%rbp)
movq -0x38(%rbp), %rax
cmpq -0x40(%rbp), %rax
je 0x23af1
movq -0x58(%rbp), %rcx
movq -0x38(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rax
movsbl (%rax), %eax
movsbl 0x51(%rcx), %ecx
cmpl %ecx, %eax
jne 0x23ae1
movq -0x48(%rbp), %rax
movb $0x2e, (%rax)
jmp 0x23af1
jmp 0x23ae3
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
jmp 0x23ab3
jmp 0x23af3
movq -0x58(%rbp), %rdi
movq (%rdi), %rax
movq %rax, -0x98(%rbp)
addq $0x8, %rdi
callq 0x211f0
movq -0x98(%rbp), %rdi
movq %rax, %rsi
movq -0x18(%rbp), %rdx
callq 0x91840
movq -0x58(%rbp), %rdi
addq $0x8, %rdi
callq 0x211a0
movq -0x58(%rbp), %rdi
movq %rax, -0x90(%rbp)
addq $0x8, %rdi
callq 0x211a0
movq -0x90(%rbp), %rdi
movq %rax, %rsi
addq -0x18(%rbp), %rsi
addq $0x1, %rsi
callq 0x24070
andb $0x1, %al
movb %al, -0x49(%rbp)
testb $0x1, -0x49(%rbp)
je 0x23b78
movq -0x58(%rbp), %rax
movq (%rax), %rdi
leaq 0xb34aa(%rip), %rsi     # 0xd7018
movl $0x2, %edx
callq 0x91840
addq $0xa0, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
nopl (%rax,%rax)