user: 提供的汇编代码用C语言表示会是什么样子：

```asm
<percentile_value>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  push   0x18(%rbp)
  push   0x10(%rbp)
  call   <floorl@plt>
  add    $0x10,%rsp
  fldt   0xe9e(%rip)        # 2000 <_fini+0xd14>
  fxch   %st(1)
  fcomi  %st(1),%st
  fstp   %st(1)
  jae    L104
  fnstcw -0x32(%rbp)
  movzwl -0x32(%rbp),%eax
  or     $0xc,%ah
  mov    %ax,-0x34(%rbp)
  fldcw  -0x34(%rbp)
  fistpll -0x20(%rbp)
  fldcw  -0x32(%rbp)
  jmp    L109
L104:
  fldt   0xe77(%rip)        # 2000 <_fini+0xd14>
  fsubrp %st,%st(1)
  fnstcw -0x32(%rbp)
  movzwl -0x32(%rbp),%eax
  or     $0xc,%ah
  mov    %ax,-0x34(%rbp)
  fldcw  -0x34(%rbp)
  fistpll -0x20(%rbp)
  fldcw  -0x32(%rbp)
  movabs $0x8000000000000000,%rax
  xor    %rax,-0x20(%rbp)
L109:
  mov    -0x20(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  push   0x18(%rbp)
  push   0x10(%rbp)
  call   <ceill@plt>
  add    $0x10,%rsp
  mov    %rax,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jb     L8
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,-0x50(%rbp)
  fildll -0x50(%rbp)
  test   %rax,%rax
  jns    L99
  fldt   0xe0f(%rip)        # 2010 <_fini+0xd24>
  faddp  %st,%st(1)
  jmp    L99
L8:
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,-0x50(%rbp)
  fildll -0x50(%rbp)
  fld    %st(0)
  fstpt  -0x50(%rbp)
  test   %rax,%rax
  jns    L0
  fldt   0xddb(%rip)        # 2010 <_fini+0xd24>
  faddp  %st,%st(1)
  fstpt  -0x50(%rbp)
  jmp    L5
L0:
  fstp   %st(0)
L5:
  push   0x18(%rbp)
  push   0x10(%rbp)
  call   <floorl@plt>
  add    $0x10,%rsp
  fldt   0x10(%rbp)
  fsubp  %st,%st(1)
  mov    -0x18(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  test   %rax,%rax
  js     L50
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  jmp    L92
L50:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2sd %rdx,%xmm0
  addsd  %xmm0,%xmm0
L92:
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  test   %rax,%rax
  js     L93
  pxor   %xmm1,%xmm1
  cvtsi2sd %rax,%xmm1
  jmp    L89
L93:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm1,%xmm1
  cvtsi2sd %rdx,%xmm1
  addsd  %xmm1,%xmm1
L89:
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  fldl   -0x40(%rbp)
  fmulp  %st,%st(1)
  fldt   -0x50(%rbp)
  faddp  %st,%st(1)
  fstpt  -0x10(%rbp)
  fldt   -0x10(%rbp)
L99:
  leave
  ret
```

assistant: ```c
long double percentile_value(long long unsigned *samples, const long double index, const long long unsigned total_number) {
  long long unsigned prev, next;
  long double value;
  prev = (long long unsigned int)floorl(index);
  next = (long long unsigned int)ceill(index);
  if (next >= total_number)
    return (long double)samples[prev];
  value = (long double)samples[prev] + (index - floorl(index)) * ((double)samples[next] - samples[prev]);
  return value;
}
```