user: 请从给定的汇编指令推导出C源代码:

```asm
<Parabolic_Minimum>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x48(%rbp)
  mov    %rsi,-0x50(%rbp)
  movsd  %xmm0,-0x58(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm0
  mov    -0x48(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  mov    -0x50(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm0
  mov    -0x50(%rbp),%rax
  movsd  (%rax),%xmm2
  subsd  %xmm2,%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm0
  mov    -0x48(%rbp),%rax
  movsd  (%rax),%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  mov    -0x50(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm0
  mov    -0x50(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm2
  subsd  %xmm2,%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x38(%rbp),%xmm0
  subsd  -0x30(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm1
  mov    -0x48(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm0
  addsd  %xmm1,%xmm0
  mulsd  -0x38(%rbp),%xmm0
  mov    -0x48(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm2
  mov    -0x48(%rbp),%rax
  movsd  (%rax),%xmm1
  addsd  %xmm2,%xmm1
  mulsd  -0x30(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  mov    -0x48(%rbp),%rax
  movsd  (%rax),%xmm0
  mov    -0x48(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm1
  mov    -0x48(%rbp),%rax
  movsd  (%rax),%xmm2
  subsd  %xmm2,%xmm1
  mulsd  -0x58(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm1
  mov    -0x48(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm0
  mov    -0x48(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm2
  subsd  %xmm2,%xmm0
  mulsd  -0x58(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  mov    -0x50(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm0
  mov    -0x50(%rbp),%rax
  movsd  (%rax),%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  mov    -0x48(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm0
  mov    -0x48(%rbp),%rax
  movsd  (%rax),%xmm2
  subsd  %xmm2,%xmm0
  mulsd  %xmm1,%xmm0
  mov    -0x48(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm1
  mov    -0x48(%rbp),%rax
  movsd  (%rax),%xmm3
  movapd %xmm1,%xmm2
  subsd  %xmm3,%xmm2
  movapd %xmm0,%xmm1
  divsd  %xmm2,%xmm1
  mov    -0x50(%rbp),%rax
  movsd  (%rax),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  mov    -0x50(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm0
  comisd -0x8(%rbp),%xmm0
  jb     L59
  mov    -0x50(%rbp),%rax
  movsd  (%rax),%xmm1
  mov    -0x50(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm0
  comisd %xmm1,%xmm0
  jbe    L23
  movsd  -0x18(%rbp),%xmm0
  jmp    L16
L23:
  movsd  -0x10(%rbp),%xmm0
L16:
  movsd  %xmm0,-0x40(%rbp)
  jmp    L43
L59:
  movsd  -0x18(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x28(%rbp),%xmm1
  movsd  -0x20(%rbp),%xmm0
  comisd %xmm1,%xmm0
  jb     L76
  movsd  -0x18(%rbp),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  jmp    L43
L76:
  movsd  -0x10(%rbp),%xmm0
  mulsd  -0x28(%rbp),%xmm0
  comisd -0x20(%rbp),%xmm0
  jb     L25
  movsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  jmp    L43
L25:
  movsd  -0x20(%rbp),%xmm0
  divsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,-0x40(%rbp)
L43:
  movsd  -0x40(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  pop    %rbp
  ret
```

assistant: ```c
double Parabolic_Minimum(double x[], double y[], double cut_off_scale_factor) {
  double d1 = (x[2] - x[1]) * (y[1] - y[0]);
  double d2 = (x[1] - x[0]) * (y[2] - y[1]);
  double denominator = 2.0 * (d1 - d2);
  double numerator = (x[2] + x[1]) * d1 - (x[1] + x[0]) * d2;
  double x_lb = x[0] - cut_off_scale_factor * (x[1] - x[0]);
  double x_ub = x[2] + cut_off_scale_factor * (x[2] - x[1]);
  double ymax = (y[2] - y[0]) * (x[1] - x[0]) / (x[2] - x[0]) + y[0];
  double xmin;
  if (y[1] >= ymax)
    xmin = (y[0] < y[2]) ? x_lb : x_ub;
  else {
    if (x_lb * denominator <= numerator)
      xmin = x_lb;
    else if (x_ub * denominator >= numerator)
      xmin = x_ub;
    else
      xmin = numerator / denominator;
  }
  return xmin;
}
```