user: Demonstrate the C code that generates the assembly output below:

```asm
<ft_round>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %edi,-0x24(%rbp)
  addl   $0x1,-0x24(%rbp)
  fld1
  fstpt  -0x20(%rbp)
  fldt   0x10(%rbp)
  fnstcw -0x26(%rbp)
  movzwl -0x26(%rbp),%eax
  or     $0xc,%ah
  mov    %ax,-0x28(%rbp)
  fldcw  -0x28(%rbp)
  fistpll -0x30(%rbp)
  fldcw  -0x26(%rbp)
  fildll -0x30(%rbp)
  fldt   0x10(%rbp)
  fsubp  %st,%st(1)
  fstpt  -0x10(%rbp)
  jmp    L59
L13:
  fldt   -0x10(%rbp)
  fldt   0xec3(%rip)        # 2000 <_fini+0xd50>
  fmulp  %st,%st(1)
  fstpt  -0x10(%rbp)
  fldt   -0x20(%rbp)
  fldt   0xeb5(%rip)        # 2000 <_fini+0xd50>
  fdivrp %st,%st(1)
  fstpt  -0x20(%rbp)
L59:
  mov    -0x24(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    %edx,-0x24(%rbp)
  test   %eax,%eax
  jne    L13
  fldt   -0x10(%rbp)
  fldcw  -0x28(%rbp)
  fistpll -0x30(%rbp)
  fldcw  -0x26(%rbp)
  mov    -0x30(%rbp),%rcx
  movabs $0x6666666666666667,%rdx
  mov    %rcx,%rax
  imul   %rdx
  mov    %rdx,%rax
  sar    $0x2,%rax
  mov    %rcx,%rsi
  sar    $0x3f,%rsi
  sub    %rsi,%rax
  mov    %rax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  sub    %rax,%rcx
  mov    %rcx,%rdx
  test   %rdx,%rdx
  jns    L31
  fldt   -0x10(%rbp)
  fldcw  -0x28(%rbp)
  fistpll -0x30(%rbp)
  fldcw  -0x26(%rbp)
  mov    -0x30(%rbp),%rax
  neg    %rax
  mov    %rax,%rcx
  movabs $0x6666666666666667,%rdx
  mov    %rcx,%rax
  imul   %rdx
  mov    %rdx,%rax
  sar    $0x2,%rax
  mov    %rcx,%rsi
  sar    $0x3f,%rsi
  sub    %rsi,%rax
  mov    %rax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  sub    %rax,%rcx
  mov    %rcx,%rdx
  mov    %rdx,-0x30(%rbp)
  fildll -0x30(%rbp)
  jmp    L3
L31:
  fldt   -0x10(%rbp)
  fldcw  -0x28(%rbp)
  fistpll -0x30(%rbp)
  fldcw  -0x26(%rbp)
  mov    -0x30(%rbp),%rcx
  movabs $0x6666666666666667,%rdx
  mov    %rcx,%rax
  imul   %rdx
  mov    %rdx,%rax
  sar    $0x2,%rax
  mov    %rcx,%rsi
  sar    $0x3f,%rsi
  sub    %rsi,%rax
  mov    %rax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  sub    %rax,%rcx
  mov    %rcx,%rdx
  mov    %rdx,-0x30(%rbp)
  fildll -0x30(%rbp)
L3:
  fstpt  -0x10(%rbp)
  fldt   -0x10(%rbp)
  fldz
  fcomip %st(1),%st
  fstp   %st(0)
  jbe    L47
  fldt   -0x10(%rbp)
  fldt   0xdac(%rip)        # 2010 <_fini+0xd60>
  fcomip %st(1),%st
  fstp   %st(0)
  setae  %al
  jmp    L45
L47:
  fldt   0xdad(%rip)        # 2020 <_fini+0xd70>
  fldt   -0x10(%rbp)
  fcomip %st(1),%st
  fstp   %st(0)
  setae  %al
L45:
  test   %al,%al
  je     L18
  fldt   0xd79(%rip)        # 2000 <_fini+0xd50>
  fldt   -0x10(%rbp)
  fsubrp %st,%st(1)
  fldt   -0x20(%rbp)
  fmulp  %st,%st(1)
  fstpt  -0x20(%rbp)
  jmp    L2
L18:
  fldt   -0x10(%rbp)
  fchs
  fldt   -0x20(%rbp)
  fmulp  %st,%st(1)
  fstpt  -0x20(%rbp)
L2:
  fldt   0x10(%rbp)
  fldt   -0x20(%rbp)
  faddp  %st,%st(1)
  pop    %rbp
  ret
```

assistant: ```c
long double ft_round(long double n, int prec) {
  long double inc;
  long double tmp;
  prec++;
  inc = 1;
  tmp = n - (long long)n;
  while (prec--) {
    tmp *= 10;
    inc /= 10;
  }
  tmp = (((long long)tmp % 10 < 0) ? (-(long long)tmp % 10) : ((long long)tmp % 10));
  if (((tmp < 0) ? (-tmp) : (tmp)) >= 5)
    inc *= (10 - tmp);
  else
    inc *= -tmp;
  return (n + inc);
}
```