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

```asm
<main>:
  endbr64
  sub    $0x98,%rsp
  movapd D46(%rip),%xmm0
  movsd  D184(%rip),%xmm1
  mov    %fs:0x28,%rax
  mov    %rax,0x88(%rsp)
  xor    %eax,%eax
  lea    0x20(%rsp),%rcx
  mov    %rsp,%rdx
  lea    0x40(%rsp),%rsi
  movaps %xmm0,(%rsp)
  mov    D7(%rip),%rax
  movapd D47(%rip),%xmm0
  lea    0x60(%rsp),%rdi
  movq   $0x0,0x50(%rsp)
  movaps %xmm0,0x20(%rsp)
  movapd D44(%rip),%xmm0
  mov    %rax,0x10(%rsp)
  mov    D146(%rip),%rax
  movaps %xmm0,0x40(%rsp)
  movapd D16(%rip),%xmm0
  mov    %rax,0x30(%rsp)
  movaps %xmm0,0x60(%rsp)
  movapd D178(%rip),%xmm0
  movaps %xmm0,0x70(%rsp)
  movsd  D11(%rip),%xmm0
  call   <estimate_ncf@plt>
  movsd  0x78(%rsp),%xmm3
  mov    $0x4,%eax
  movsd  0x70(%rsp),%xmm2
  movsd  0x68(%rsp),%xmm1
  movsd  0x60(%rsp),%xmm0
  lea    D62(%rip),%rdi
  call   <printf@plt>
  movsd  D99(%rip),%xmm3
  movsd  D155(%rip),%xmm2
  lea    D116(%rip),%rdi
  movsd  D177(%rip),%xmm1
  movsd  D16(%rip),%xmm0
  mov    $0x4,%eax
  call   <printf@plt>
  movsd  0x50(%rsp),%xmm2
  movsd  0x48(%rsp),%xmm1
  lea    D95(%rip),%rdi
  movsd  0x40(%rsp),%xmm0
  mov    $0x3,%eax
  call   <printf@plt>
  pxor   %xmm2,%xmm2
  movsd  D0(%rip),%xmm1
  movsd  D67(%rip),%xmm0
  lea    D175(%rip),%rdi
  mov    $0x3,%eax
  call   <printf@plt>
  mov    0x88(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L6
  xor    %eax,%eax
  add    $0x98,%rsp
  ret
L6:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: data_tag: D46
type: byte[16]
name: parse_data
arguments: data_tag: D184
type: f64
name: parse_data
arguments: data_tag: D7
type: byte[8]
name: parse_data
arguments: data_tag: D47
type: byte[16]
name: parse_data
arguments: data_tag: D44
type: byte[16]
name: parse_data
arguments: data_tag: D146
type: f64
name: parse_data
arguments: data_tag: D16
type: f64[2]
name: parse_data
arguments: data_tag: D178
type: f64[2]
name: parse_data
arguments: data_tag: D11
type: f64
name: parse_data
arguments: data_tag: D62
type: string
name: parse_data
arguments: data_tag: D99
type: f64
name: parse_data
arguments: data_tag: D155
type: f64
name: parse_data
arguments: data_tag: D116
type: string
name: parse_data
arguments: data_tag: D177
type: f64
name: parse_data
arguments: data_tag: D95
type: string
name: parse_data
arguments: data_tag: D0
type: byte[8]
name: parse_data
arguments: data_tag: D67
type: byte[8]
name: parse_data
arguments: data_tag: D175
type: string

tool: {"D46": [0xf5,0x8e,0x09,0xe7,0x09,0x3a,0x10,0x3f,0xd0,0xfa,0x4a,0xd6,0x97,0x5b,0xe0,0xbe]}

tool: D184: 0.05

tool: {"D7": [0xa2,0xaf,0xc5,0x13,0xe6,0xe2,0x44,0x3f]}

tool: {"D47": [0x0a,0x68,0x22,0x6c,0x78,0x7a,0xcd,0xbf,0x44,0xfa,0xed,0xeb,0xc0,0x39,0xd3,0x3f]}

tool: {"D44": [0x01,0x4d,0x84,0x0d,0x4f,0xaf,0x84,0xbf,0x76,0x71,0x1b,0x0d,0xe0,0x2d,0x80,0xbf]}

tool: D146: 9.4569

tool: {"D16": [0.9996,0.0167]}

tool: {"D178": [0.0134,0.0197]}

tool: D11: 0.1

tool: D62: q_est:	%f	%f	%f	%f


tool: D99: 0.0197

tool: D155: 0.0132

tool: D116: q_ref:	%f	%f	%f	%f


tool: D177: 0.0165

tool: D95: 
b_est:	%f	%f	%f


tool: {"D0": [0x39,0xb4,0xc8,0x76,0xbe,0x9f,0x7a,0xbf]}

tool: {"D67": [0xde,0x71,0x8a,0x8e,0xe4,0xf2,0x7f,0xbf]}

tool: D175: b_ref:	%f	%f	%f


assistant: ```c
int main(void) {
  double omega[3] = {0.0619E-3, -0.0078E-3, 0.6374E-3};
  double acc[3] = {-0.2303, 0.3004, 9.4569};
  double b_est[3] = {-0.0101, -0.0079, 0.0000};
  double q_est[4] = {0.9996, 0.0167, 0.0134, 0.0197};
  double dt = 0.05;
  double kp = 0.1;
  estimate_ncf(q_est, b_est, omega, acc, kp, dt);
  printf("q_est:\t%f\t%f\t%f\t%f\n", q_est[0], q_est[1], q_est[2], q_est[3]);
  printf("q_ref:\t%f\t%f\t%f\t%f\n", 0.9996, 0.0165, 0.0132, 0.0197);
  printf("\nb_est:\t%f\t%f\t%f\n", b_est[0], b_est[1], b_est[2]);
  printf("b_ref:\t%f\t%f\t%f\n", -0.0078, -0.0065, 0.0000);
  return 0;
}
```