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

```asm
<distributions_normal>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x28,%rsp
  movss  %xmm0,-0x24(%rbp)
  movss  %xmm1,-0x28(%rbp)
  movsd  D2(%rip),%xmm0
  movapd %xmm0,%xmm1
  mov    D95(%rip),%rax
  movq   %rax,%xmm0
  call   <distributions_uniform@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x1c(%rbp)
  movsd  D2(%rip),%xmm0
  movapd %xmm0,%xmm1
  mov    D95(%rip),%rax
  movq   %rax,%xmm0
  call   <distributions_uniform@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x18(%rbp)
  pxor   %xmm1,%xmm1
  cvtss2sd -0x1c(%rbp),%xmm1
  movsd  D78(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <cos@plt>
  mov    %eax,%ebx
  mov    -0x18(%rbp),%eax
  movd   %eax,%xmm0
  call   <log@plt>
  movsd  D104(%rip),%xmm1
  mulsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  imul   %ebx,%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movss  %xmm0,-0x14(%rbp)
  movss  -0x28(%rbp),%xmm0
  mulss  -0x14(%rbp),%xmm0
  movss  -0x24(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x20(%rbp)
  jmp    L7
L19:
  movsd  D2(%rip),%xmm0
  movapd %xmm0,%xmm1
  mov    D95(%rip),%rax
  movq   %rax,%xmm0
  call   <distributions_uniform@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x1c(%rbp)
  movsd  D2(%rip),%xmm0
  movapd %xmm0,%xmm1
  mov    D95(%rip),%rax
  movq   %rax,%xmm0
  call   <distributions_uniform@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x18(%rbp)
  pxor   %xmm1,%xmm1
  cvtss2sd -0x1c(%rbp),%xmm1
  movsd  D78(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <cos@plt>
  mov    %eax,%ebx
  mov    -0x18(%rbp),%eax
  movd   %eax,%xmm0
  call   <log@plt>
  movsd  D104(%rip),%xmm1
  mulsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  imul   %ebx,%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movss  %xmm0,-0x14(%rbp)
  movss  -0x28(%rbp),%xmm0
  mulss  -0x14(%rbp),%xmm0
  movss  -0x24(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x20(%rbp)
L7:
  movss  -0x20(%rbp),%xmm0
  subss  -0x24(%rbp),%xmm0
  movd   %xmm0,%eax
  movd   %eax,%xmm0
  call   <fabs@plt>
  movq   %xmm0,%rax
  pxor   %xmm1,%xmm1
  cvtss2sd -0x28(%rbp),%xmm1
  movsd  D90(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movq   %rax,%xmm2
  comisd %xmm0,%xmm2
  ja     L19
  movss  -0x20(%rbp),%xmm0
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D2
data_type: f64
name: extract_symbolic_data
arguments: label: D95
data_type: f64
name: extract_symbolic_data
arguments: label: D78
data_type: f64
name: extract_symbolic_data
arguments: label: D104
data_type: byte[8]
name: extract_symbolic_data
arguments: label: D90
data_type: f64

tool: D2: 1

tool: D95: 0

tool: D78: 6.283185307179586

tool: {"D104": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0]}

tool: D90: 20

assistant: ```c
float distributions_normal(float mean, float sigma) {
  float u1, u2, x, y;
  u1 = distributions_uniform(0.0, 1.0);
  u2 = distributions_uniform(0.0, 1.0);
  x = (float)(cos(6.283185307179586 * (float)u1) * sqrt(-2.0 * log((float)u2)));
  y = sigma * x + mean;
  while (fabs(y - mean) > 20.0 * sigma) {
    u1 = distributions_uniform(0.0, 1.0);
    u2 = distributions_uniform(0.0, 1.0);
    x = (float)(cos(6.283185307179586 * (float)u1) * sqrt(-2.0 * log((float)u2)));
    y = sigma * x + mean;
  }
  return (y);
}
```