user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<inverse_error_func>:
  endbr64
  sub    $0x38,%rsp
  movapd %xmm0,%xmm2
  movsd  D64(%rip),%xmm0
  comisd %xmm2,%xmm0
  ja     L88
  movsd  D428(%rip),%xmm4
  comisd %xmm4,%xmm2
  ja     L88
  ucomisd %xmm0,%xmm2
  mov    $0x0,%edx
  setnp  %al
  cmovne %edx,%eax
  test   %al,%al
  jne    L168
  ucomisd %xmm4,%xmm2
  setnp  %dl
  cmove  %edx,%eax
  test   %al,%al
  jne    L168
  comisd %xmm0,%xmm2
  movsd  D45(%rip),%xmm0
  jbe    L47
  comisd %xmm2,%xmm0
  ja     L130
L47:
  comisd %xmm0,%xmm2
  movsd  D79(%rip),%xmm0
  jb     L120
  comisd %xmm2,%xmm0
  jb     L120
  movapd %xmm2,%xmm0
  movsd  D308(%rip),%xmm5
  movsd  D27(%rip),%xmm1
  movsd  %xmm2,0x20(%rsp)
  mulsd  %xmm2,%xmm0
  mulsd  %xmm0,%xmm1
  movapd %xmm0,%xmm3
  mulsd  %xmm5,%xmm3
  addsd  D307(%rip),%xmm1
  mulsd  %xmm0,%xmm1
  subsd  D44(%rip),%xmm1
  addsd  %xmm5,%xmm3
  mulsd  %xmm0,%xmm1
  mulsd  %xmm0,%xmm3
  addsd  D183(%rip),%xmm1
  addsd  D343(%rip),%xmm3
  mulsd  %xmm2,%xmm1
  mulsd  %xmm0,%xmm3
  subsd  D317(%rip),%xmm3
  mulsd  %xmm0,%xmm3
  addsd  %xmm4,%xmm3
  divsd  %xmm3,%xmm1
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x18(%rsp)
  call   <erf@plt>
  movq   D77(%rip),%xmm5
  movapd %xmm0,%xmm3
  movaps %xmm5,(%rsp)
L34:
  movsd  0x18(%rsp),%xmm1
  movsd  0x20(%rsp),%xmm2
  xorpd  %xmm1,%xmm5
  movapd %xmm5,%xmm4
  mulsd  %xmm1,%xmm4
  jmp    L2
  nopl   0x0(%rax)
L88:
  lea    D19(%rip),%rdi
  call   <printf@plt>
  mov    D64(%rip),%rax
  add    $0x38,%rsp
  movq   %rax,%xmm0
  jmp    10b0 <log@plt>
  nopl   0x0(%rax)
L120:
  comisd %xmm0,%xmm2
  ja     L126
L48:
  movq   D77(%rip),%xmm5
  pxor   %xmm3,%xmm3
  movsd  D77(%rip),%xmm4
  movapd %xmm3,%xmm1
  movaps %xmm5,(%rsp)
L2:
  subsd  %xmm2,%xmm3
  movapd %xmm4,%xmm0
  movsd  %xmm2,0x20(%rsp)
  movsd  %xmm1,0x28(%rsp)
  movsd  %xmm3,0x18(%rsp)
  call   <gp_exp@plt>
  movsd  D368(%rip),%xmm4
  movsd  0x18(%rsp),%xmm3
  movsd  0x28(%rsp),%xmm1
  mulsd  %xmm0,%xmm4
  divsd  %xmm4,%xmm3
  subsd  %xmm3,%xmm1
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x18(%rsp)
  call   <erf@plt>
  movsd  0x18(%rsp),%xmm1
  movapd (%rsp),%xmm6
  movapd %xmm0,%xmm3
  movsd  0x20(%rsp),%xmm2
  xorpd  %xmm1,%xmm6
  movapd %xmm6,%xmm0
  subsd  %xmm2,%xmm3
  movsd  %xmm2,0x28(%rsp)
  mulsd  %xmm1,%xmm0
  movsd  %xmm3,0x20(%rsp)
  call   <gp_exp@plt>
  movsd  D368(%rip),%xmm4
  movsd  0x20(%rsp),%xmm3
  movsd  0x18(%rsp),%xmm1
  mulsd  %xmm0,%xmm4
  divsd  %xmm4,%xmm3
  subsd  %xmm3,%xmm1
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x18(%rsp)
  call   <erf@plt>
  movsd  0x18(%rsp),%xmm1
  movapd (%rsp),%xmm7
  movapd %xmm0,%xmm3
  movsd  0x28(%rsp),%xmm2
  xorpd  %xmm1,%xmm7
  movapd %xmm7,%xmm0
  subsd  %xmm2,%xmm3
  mulsd  %xmm1,%xmm0
  movsd  %xmm3,0x20(%rsp)
  call   <gp_exp@plt>
  movsd  D368(%rip),%xmm4
  movsd  0x20(%rsp),%xmm3
  movsd  0x18(%rsp),%xmm1
  mulsd  %xmm0,%xmm4
  divsd  %xmm4,%xmm3
  subsd  %xmm3,%xmm1
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x20(%rsp)
  call   <erf@plt>
  movsd  0x20(%rsp),%xmm1
  movapd (%rsp),%xmm7
  movapd %xmm0,%xmm3
  movsd  0x28(%rsp),%xmm2
  xorpd  %xmm1,%xmm7
  movsd  %xmm1,(%rsp)
  movapd %xmm7,%xmm0
  subsd  %xmm2,%xmm3
  mulsd  %xmm1,%xmm0
  movsd  %xmm3,0x18(%rsp)
  call   <gp_exp@plt>
  movsd  0x18(%rsp),%xmm3
  movsd  (%rsp),%xmm1
  movsd  D368(%rip),%xmm2
  mulsd  %xmm0,%xmm2
  divsd  %xmm2,%xmm3
  subsd  %xmm3,%xmm1
L164:
  movapd %xmm1,%xmm0
  add    $0x38,%rsp
  ret
  nopl   (%rax)
L126:
  comisd %xmm2,%xmm4
  jbe    L48
  movapd %xmm4,%xmm0
  movsd  %xmm2,0x18(%rsp)
  subsd  %xmm2,%xmm0
  mulsd  D266(%rip),%xmm0
  call   <log@plt>
  movq   D77(%rip),%xmm6
  mov    D428(%rip),%rax
  movapd %xmm0,%xmm1
  ucomisd D77(%rip),%xmm1
  movsd  0x18(%rsp),%xmm2
  movaps %xmm6,(%rsp)
  xorpd  %xmm1,%xmm6
  movq   %rax,%xmm4
  movapd %xmm6,%xmm0
  ja     L12
  sqrtsd %xmm0,%xmm0
L40:
  movsd  D75(%rip),%xmm1
  movsd  D85(%rip),%xmm3
  movsd  %xmm2,0x20(%rsp)
  mulsd  %xmm0,%xmm1
  addsd  D251(%rip),%xmm1
  mulsd  %xmm0,%xmm3
  addsd  D105(%rip),%xmm3
  mulsd  %xmm0,%xmm1
  subsd  D96(%rip),%xmm1
  mulsd  %xmm0,%xmm1
  mulsd  %xmm3,%xmm0
  subsd  D273(%rip),%xmm1
  addsd  %xmm4,%xmm0
  divsd  %xmm0,%xmm1
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x18(%rsp)
  call   <erf@plt>
  movapd (%rsp),%xmm5
  movapd %xmm0,%xmm3
  jmp    L34
L130:
  movapd %xmm2,%xmm0
  movsd  %xmm2,0x18(%rsp)
  addsd  %xmm4,%xmm0
  mulsd  D266(%rip),%xmm0
  call   <log@plt>
  movq   D77(%rip),%xmm5
  mov    D428(%rip),%rax
  movapd %xmm0,%xmm1
  ucomisd D77(%rip),%xmm1
  movsd  0x18(%rsp),%xmm2
  movaps %xmm5,(%rsp)
  xorpd  %xmm1,%xmm5
  movq   %rax,%xmm4
  movapd %xmm5,%xmm0
  ja     L68
  sqrtsd %xmm0,%xmm0
L102:
  movsd  D75(%rip),%xmm1
  movsd  D85(%rip),%xmm3
  movsd  %xmm2,0x20(%rsp)
  mulsd  %xmm0,%xmm1
  addsd  D251(%rip),%xmm1
  mulsd  %xmm0,%xmm3
  addsd  D105(%rip),%xmm3
  mulsd  %xmm0,%xmm1
  subsd  D96(%rip),%xmm1
  mulsd  %xmm0,%xmm1
  mulsd  %xmm3,%xmm0
  subsd  D273(%rip),%xmm1
  xorpd  (%rsp),%xmm1
  addsd  %xmm4,%xmm0
  divsd  %xmm0,%xmm1
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x18(%rsp)
  call   <erf@plt>
  movsd  0x18(%rsp),%xmm1
  movapd (%rsp),%xmm6
  movsd  0x20(%rsp),%xmm2
  movapd %xmm0,%xmm3
  xorpd  %xmm1,%xmm6
  movapd %xmm6,%xmm4
  mulsd  %xmm1,%xmm4
  jmp    L2
  nopl   0x0(%rax,%rax,1)
L168:
  pxor   %xmm0,%xmm0
  movsd  %xmm2,(%rsp)
  call   <log@plt>
  movsd  (%rsp),%xmm2
  xorpd  D77(%rip),%xmm2
  movapd %xmm2,%xmm1
  mulsd  %xmm0,%xmm1
  jmp    L164
L68:
  movsd  %xmm2,0x18(%rsp)
  call   <sqrt@plt>
  mov    D428(%rip),%rax
  movsd  0x18(%rsp),%xmm2
  movq   %rax,%xmm4
  jmp    L102
L12:
  movsd  %xmm2,0x18(%rsp)
  call   <sqrt@plt>
  mov    D428(%rip),%rax
  movsd  0x18(%rsp),%xmm2
  movq   %rax,%xmm4
  jmp    L40
```

tool_calls: name: read_data
arguments: label: D64
data_type: f32[2]
name: read_data
arguments: label: D428
data_type: f64
name: read_data
arguments: label: D45
data_type: byte[8]
name: read_data
arguments: label: D79
data_type: f64
name: read_data
arguments: label: D308
data_type: f64
name: read_data
arguments: label: D27
data_type: byte[8]
name: read_data
arguments: label: D307
data_type: f64
name: read_data
arguments: label: D44
data_type: f64
name: read_data
arguments: label: D183
data_type: f64
name: read_data
arguments: label: D343
data_type: f64
name: read_data
arguments: label: D317
data_type: f64
name: read_data
arguments: label: D77
data_type: f32[4]
name: read_data
arguments: label: D19
data_type: string
name: read_data
arguments: label: D368
data_type: byte[8]
name: read_data
arguments: label: D266
data_type: f32[2]
name: read_data
arguments: label: D75
data_type: f64
name: read_data
arguments: label: D85
data_type: f64
name: read_data
arguments: label: D251
data_type: f64
name: read_data
arguments: label: D105
data_type: f64
name: read_data
arguments: label: D96
data_type: f64
name: read_data
arguments: label: D273
data_type: f64

tool: {"D64": [0.0,-1.875]}

tool: D428: 1

tool: {"D45": [0x66,0x66,0x66,0x66,0x66,0x66,0xe6,0xbf]}

tool: D79: 0.7

tool: D308: 0.012229801

tool: {"D27": [0x82,0x6f,0x28,0xe9,0x52,0xfd,0xc1,0xbf]}

tool: D307: 0.914624893

tool: D44: 1.645349621

tool: D183: 0.886226899

tool: D343: 1.442710462

tool: D317: 2.118377725

tool: {"D77": [0.0,-0.0,0.0,0.0]}

tool: D19: inverse_error_func: The value out of the range of the function

tool: {"D368": [0x6d,0x9b,0x42,0x50,0xd7,0x0d,0xf2,0x3f]}

tool: {"D266": [0.0,1.75]}

tool: D75: 1.641345311

tool: D85: 1.6370678

tool: D251: 3.429567803

tool: D105: 3.5438892

tool: D96: 1.624906493

tool: D273: 1.970840454

assistant: ```c
double inverse_error_func(double y) {
  double x = 0.0;
  double z = 0.0;
  double y0 = 0.7;
  static const double a[4] = {0.886226899, -1.645349621, 0.914624893, -0.140543331};
  static const double b[4] = {-2.118377725, 1.442710462, -0.329097515, 0.012229801};
  static const double c[4] = {-1.970840454, -1.624906493, 3.429567803, 1.641345311};
  static const double d[2] = {3.543889200, 1.637067800};
  if ((y < -1.0) || (1.0 < y)) {
    printf("inverse_error_func: The value out of the range of the function");
    x = log(-1.0);
    return (x);
  } else if ((y == -1.0) || (1.0 == y)) {
    x = -y * log(0.0);
    return (x);
  } else if ((-1.0 < y) && (y < -y0)) {
    z = sqrt(-log((1.0 + y) / 2.0));
    x = -(((c[3] * z + c[2]) * z + c[1]) * z + c[0]) / ((d[1] * z + d[0]) * z + 1.0);
  } else {
    if ((-y0 <= y) && (y <= y0)) {
      z = y * y;
      x = y * (((a[3] * z + a[2]) * z + a[1]) * z + a[0]) / ((((b[3] * z + b[3]) * z + b[1]) * z + b[0]) * z + 1.0);
    } else if ((y0 < y) && (y < 1.0)) {
      z = sqrt(-log((1.0 - y) / 2.0));
      x = (((c[3] * z + c[2]) * z + c[1]) * z + c[0]) / ((d[1] * z + d[0]) * z + 1.0);
    }
  }
  x = x - (erf(x) - y) / (2.0 / sqrt(3.14159265358979323846) * gp_exp(-x * x));
  x = x - (erf(x) - y) / (2.0 / sqrt(3.14159265358979323846) * gp_exp(-x * x));
  x = x - (erf(x) - y) / (2.0 / sqrt(3.14159265358979323846) * gp_exp(-x * x));
  x = x - (erf(x) - y) / (2.0 / sqrt(3.14159265358979323846) * gp_exp(-x * x));
  return (x);
}
```