user: 请将以下的汇编代码转换成C语言代码:

```asm
<erfcinv>:
  endbr64
  sub    $0x18,%rsp
  comisd D158(%rip),%xmm0
  ja     L95
  pxor   %xmm2,%xmm2
  comisd %xmm0,%xmm2
  ja     L95
L29:
  movsd  D196(%rip),%xmm1
  comisd %xmm1,%xmm0
  jb     L85
  movsd  D158(%rip),%xmm3
  comisd %xmm0,%xmm3
  ja     L72
L85:
  comisd %xmm0,%xmm1
  movsd  D147(%rip),%xmm1
  jbe    L40
  comisd %xmm1,%xmm0
  jae    L38
L40:
  comisd %xmm0,%xmm1
  pxor   %xmm2,%xmm2
  jbe    L2
  comisd %xmm2,%xmm0
  ja     L66
L2:
  comisd %xmm0,%xmm2
  movsd  D247(%rip),%xmm1
  jae    L51
  ucomisd D158(%rip),%xmm0
  jp     L51
  movq   %xmm1,%rax
  cmove  D101(%rip),%rax
  movq   %rax,%xmm1
L51:
  movapd %xmm1,%xmm0
  add    $0x18,%rsp
  ret
  nopl   0x0(%rax,%rax,1)
L95:
  lea    D200(%rip),%rdi
  movsd  %xmm0,0x8(%rsp)
  call   <printf@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  movsd  0x8(%rsp),%xmm0
  jmp    L29
  nop
L72:
  movsd  D98(%rip),%xmm1
  add    $0x18,%rsp
  subsd  %xmm0,%xmm1
  movapd %xmm1,%xmm0
  jmp    1090 <erfinv@plt>
  nopl   0x0(%rax)
L66:
  call   <log@plt>
  neg    %eax
  mov    %eax,%edi
  call   <sqrt@plt>
  movsd  D74(%rip),%xmm2
  movapd %xmm0,%xmm1
  movsd  D98(%rip),%xmm0
  divsd  %xmm1,%xmm0
  movsd  D201(%rip),%xmm1
  divsd  %xmm0,%xmm2
  mulsd  %xmm0,%xmm1
  addsd  D215(%rip),%xmm1
  mulsd  %xmm0,%xmm1
  addsd  D63(%rip),%xmm2
  addsd  %xmm2,%xmm1
  movsd  D132(%rip),%xmm2
  addsd  %xmm0,%xmm2
  mulsd  %xmm2,%xmm0
  addsd  D163(%rip),%xmm0
  add    $0x18,%rsp
  divsd  %xmm0,%xmm1
  movapd %xmm1,%xmm0
  ret
  nopl   0x0(%rax,%rax,1)
L38:
  call   <log@plt>
  neg    %eax
  mov    %eax,%edi
  call   <sqrt@plt>
  movsd  D180(%rip),%xmm2
  movapd %xmm0,%xmm1
  movsd  D98(%rip),%xmm0
  divsd  %xmm1,%xmm0
  movsd  D222(%rip),%xmm1
  divsd  %xmm0,%xmm2
  mulsd  %xmm0,%xmm1
  addsd  D2(%rip),%xmm1
  mulsd  %xmm0,%xmm1
  subsd  D119(%rip),%xmm1
  mulsd  %xmm0,%xmm1
  addsd  D202(%rip),%xmm1
  mulsd  %xmm0,%xmm1
  addsd  D157(%rip),%xmm2
  addsd  %xmm2,%xmm1
  movsd  D121(%rip),%xmm2
  addsd  %xmm0,%xmm2
  mulsd  %xmm2,%xmm0
  addsd  D141(%rip),%xmm0
  add    $0x18,%rsp
  divsd  %xmm0,%xmm1
  movapd %xmm1,%xmm0
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D158
data_type: f64[2]
name: parse_data
arguments: data_tag: D196
data_type: f64
name: parse_data
arguments: data_tag: D147
data_type: byte[8]
name: parse_data
arguments: data_tag: D247
data_type: f64
name: parse_data
arguments: data_tag: D101
data_type: byte[8]
name: parse_data
arguments: data_tag: D200
data_type: string
name: parse_data
arguments: data_tag: D98
data_type: f64
name: parse_data
arguments: data_tag: D74
data_type: f64
name: parse_data
arguments: data_tag: D201
data_type: byte[8]
name: parse_data
arguments: data_tag: D215
data_type: f64
name: parse_data
arguments: data_tag: D63
data_type: f64
name: parse_data
arguments: data_tag: D132
data_type: f64
name: parse_data
arguments: data_tag: D163
data_type: f64
name: parse_data
arguments: data_tag: D180
data_type: f64
name: parse_data
arguments: data_tag: D222
data_type: byte[8]
name: parse_data
arguments: data_tag: D2
data_type: f64
name: parse_data
arguments: data_tag: D119
data_type: f64
name: parse_data
arguments: data_tag: D202
data_type: f64
name: parse_data
arguments: data_tag: D157
data_type: f64
name: parse_data
arguments: data_tag: D121
data_type: f64
name: parse_data
arguments: data_tag: D141
data_type: f64

tool: {"D158": [2.0,0.0625]}

tool: D196: 0.0625

tool: {"D147": [0x30,0x05,0x8e,0xe4,0x2e,0xff,0x2b,0x2b]}

tool: D247: 1.79e+308

tool: {"D101": [0x99,0xbb,0xad,0x58,0xf1,0xdc,0xef,0xff]}

tool: D200: The Input takes values between 0.0 and 2.0

tool: D98: 1

tool: D74: 0.00980456202915

tool: {"D201": [0x73,0x0c,0x50,0x2b,0x28,0x33,0xe1,0xbf]}

tool: D215: 0.97302949837

tool: D63: 0.363667889171

tool: D132: 0.363699971544

tool: D163: 0.00980451277802

tool: D180: 0.1550470003116

tool: {"D222": [0x81,0x61,0x23,0xda,0x6b,0x0c,0xc5,0xbf]}

tool: D2: 0.680544246825

tool: D119: 1.128081391617

tool: D202: 0.690969348887

tool: D157: 1.382719649631

tool: D121: 1.385228141995

tool: D141: 0.155024849822

assistant: ```c
double erfcinv(double x) {
  double oup, xinf, pi, t;
  xinf = 1.79e308;
  pi = 3.1415926535897932384626434;
  if (x > 2. || x < 0.) {
    printf("The Input takes values between 0.0 and 2.0");
    exit(1);
  }
  if (x >= 0.0625 && x < 2.0) {
    oup = erfinv(1.0 - x);
  } else if (x < 0.0625 && x >= 1.0e-100) {
    double p[6] = {0.1550470003116, 1.382719649631, 0.690969348887, -1.128081391617, 0.680544246825, -0.16444156791};
    double q[3] = {0.155024849822, 1.385228141995, 1.000000000000};
    t = 1.0 / sqrt(-log(x));
    oup = (p[0] / t + p[1] + t * (p[2] + t * (p[3] + t * (p[4] + t * p[5])))) / (q[0] + t * (q[1] + t * (q[2])));
  } else if (x < 1.0e-100 && x > 1.0e-1000) {
    double p[4] = {0.00980456202915, 0.363667889171, 0.97302949837, -0.5374947401};
    double q[3] = {0.00980451277802, 0.363699971544, 1.000000000000};
    t = 1.0 / sqrt(-log(x));
    oup = (p[0] / t + p[1] + t * (p[2] + t * p[3])) / (q[0] + t * (q[1] + t * (q[2])));
  } else if (x <= 1.0e-1000) {
    oup = xinf;
  } else if (x == 2.) {
    oup = -xinf;
  }
  return oup;
}
```