user: What would the C source look like for the assembly code provided here:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  sub    $0xc0,%rsp
  mov    %edi,-0x20b4(%rbp)
  mov    %rsi,-0x20c0(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x3,-0x20a4(%rbp)
  movl   $0xa,-0x20a0(%rbp)
  movsd  D17(%rip),%xmm0
  movsd  %xmm0,-0x2090(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x2078(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x2070(%rbp)
  movsd  D18(%rip),%xmm0
  movsd  %xmm0,-0x2088(%rbp)
  movsd  D18(%rip),%xmm0
  movsd  %xmm0,-0x2080(%rbp)
  movl   $0xa,-0x209c(%rbp)
  movl   $0x64,-0x2098(%rbp)
  movl   $0x2,-0x2094(%rbp)
  mov    -0x20c0(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rdx
  lea    -0x2010(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x20c0(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rdx
  lea    -0x1e10(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x20c0(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%rdx
  lea    -0x1c10(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x20c0(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%rdx
  lea    -0x1a10(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x20c0(%rbp),%rax
  add    $0x28,%rax
  mov    (%rax),%rdx
  lea    -0xa10(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x20c0(%rbp),%rax
  add    $0x30,%rax
  mov    (%rax),%rdx
  lea    -0x810(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x20c0(%rbp),%rax
  add    $0x38,%rax
  mov    (%rax),%rdx
  lea    -0x610(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x20c0(%rbp),%rax
  add    $0x40,%rax
  mov    (%rax),%rdx
  lea    -0x410(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x20c0(%rbp),%rax
  add    $0x48,%rax
  mov    (%rax),%rdx
  lea    -0x210(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x20c0(%rbp),%rax
  add    $0x50,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <atoi@plt>
  mov    %eax,-0x209c(%rbp)
  mov    -0x20c0(%rbp),%rax
  add    $0x58,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <atoi@plt>
  mov    %eax,-0x20a4(%rbp)
  mov    -0x20c0(%rbp),%rax
  add    $0x60,%rax
  mov    (%rax),%rdx
  lea    -0x1410(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x20c0(%rbp),%rax
  add    $0x68,%rax
  mov    (%rax),%rdx
  lea    -0x1810(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x20c0(%rbp),%rax
  add    $0x70,%rax
  mov    (%rax),%rdx
  lea    -0x1610(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x20c0(%rbp),%rax
  add    $0x78,%rax
  mov    (%rax),%rdx
  lea    -0x1210(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x20c0(%rbp),%rax
  sub    $0xffffffffffffff80,%rax
  mov    (%rax),%rdx
  lea    -0x1010(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x20c0(%rbp),%rax
  add    $0x88,%rax
  mov    (%rax),%rdx
  lea    -0xe10(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x20c0(%rbp),%rax
  add    $0x90,%rax
  mov    (%rax),%rdx
  lea    -0xc10(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x2098(%rbp),%eax
  imul   -0x20a4(%rbp),%eax
  cltq
  shl    $0x3,%rax
  mov    %rax,%rdi
  call   <malloc@plt>
  mov    %rax,-0x2068(%rbp)
  mov    -0x2098(%rbp),%eax
  imul   -0x20a4(%rbp),%eax
  cltq
  shl    $0x3,%rax
  mov    %rax,%rdi
  call   <malloc@plt>
  mov    %rax,-0x2060(%rbp)
  mov    -0x2098(%rbp),%eax
  imul   -0x20a4(%rbp),%eax
  cltq
  shl    $0x3,%rax
  mov    %rax,%rdi
  call   <malloc@plt>
  mov    %rax,-0x2058(%rbp)
  mov    -0x2098(%rbp),%eax
  imul   -0x20a4(%rbp),%eax
  cltq
  shl    $0x3,%rax
  mov    %rax,%rdi
  call   <malloc@plt>
  mov    %rax,-0x2050(%rbp)
  mov    -0x2098(%rbp),%eax
  imul   -0x20a4(%rbp),%eax
  cltq
  shl    $0x3,%rax
  mov    %rax,%rdi
  call   <malloc@plt>
  mov    %rax,-0x2048(%rbp)
  mov    -0x20a4(%rbp),%eax
  sub    $0x1,%eax
  imul   -0x209c(%rbp),%eax
  cltq
  shl    $0x3,%rax
  mov    %rax,%rdi
  call   <malloc@plt>
  mov    %rax,-0x2040(%rbp)
  mov    -0x209c(%rbp),%eax
  imul   -0x20a4(%rbp),%eax
  cltq
  shl    $0x3,%rax
  mov    %rax,%rdi
  call   <malloc@plt>
  mov    %rax,-0x2038(%rbp)
  mov    -0x209c(%rbp),%eax
  imul   -0x2094(%rbp),%eax
  cltq
  shl    $0x3,%rax
  mov    %rax,%rdi
  call   <malloc@plt>
  mov    %rax,-0x2030(%rbp)
  mov    -0x2098(%rbp),%eax
  imul   -0x2094(%rbp),%eax
  cltq
  shl    $0x3,%rax
  mov    %rax,%rdi
  call   <malloc@plt>
  mov    %rax,-0x2028(%rbp)
  mov    -0x209c(%rbp),%eax
  imul   -0x2098(%rbp),%eax
  cltq
  shl    $0x2,%rax
  mov    %rax,%rdi
  call   <malloc@plt>
  mov    %rax,-0x2020(%rbp)
  mov    -0x209c(%rbp),%eax
  imul   -0x2098(%rbp),%eax
  cltq
  shl    $0x2,%rax
  mov    %rax,%rdi
  call   <malloc@plt>
  mov    %rax,-0x2018(%rbp)
  mov    -0x2060(%rbp),%rcx
  mov    -0x2098(%rbp),%edx
  mov    -0x20a4(%rbp),%esi
  lea    -0x2010(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <read_data_double@plt>
  mov    -0x2058(%rbp),%rcx
  mov    -0x2098(%rbp),%edx
  mov    -0x20a4(%rbp),%esi
  lea    -0x1e10(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <read_data_double@plt>
  mov    -0x2048(%rbp),%rcx
  mov    -0x2098(%rbp),%edx
  mov    -0x20a4(%rbp),%esi
  lea    -0x1c10(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <read_data_double@plt>
  mov    -0x2050(%rbp),%rcx
  mov    -0x2098(%rbp),%edx
  mov    -0x20a4(%rbp),%esi
  lea    -0x1a10(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <read_data_double@plt>
  mov    -0x2028(%rbp),%rcx
  mov    -0x2098(%rbp),%edx
  mov    -0x2094(%rbp),%esi
  lea    -0x410(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <read_data_double@plt>
  mov    -0x2030(%rbp),%rcx
  mov    -0x209c(%rbp),%edx
  mov    -0x2094(%rbp),%esi
  lea    -0x610(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <read_data_double@plt>
  mov    -0x2020(%rbp),%rcx
  mov    -0x2098(%rbp),%edx
  mov    -0x209c(%rbp),%esi
  lea    -0xa10(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <read_data_float@plt>
  mov    -0x20a4(%rbp),%eax
  lea    -0x1(%rax),%edi
  mov    -0x2040(%rbp),%rdx
  mov    -0x209c(%rbp),%esi
  lea    -0x810(%rbp),%rax
  mov    %rdx,%rcx
  mov    %edi,%edx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <read_data_double@plt>
  mov    -0x2018(%rbp),%rcx
  mov    -0x2098(%rbp),%edx
  mov    -0x209c(%rbp),%esi
  lea    -0x210(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <read_data_int@plt>
  mov    -0x20a4(%rbp),%r8d
  mov    -0x20a0(%rbp),%edi
  mov    -0x2098(%rbp),%ecx
  mov    -0x2058(%rbp),%rdx
  mov    -0x2060(%rbp),%rsi
  mov    -0x2068(%rbp),%rax
  mov    %r8d,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <zscore_calc@plt>
  mov    -0x20a4(%rbp),%eax
  lea    -0x1(%rax),%ecx
  mov    -0x2068(%rbp),%rdx
  mov    -0x2098(%rbp),%esi
  lea    -0x1810(%rbp),%rax
  mov    $0x0,%r9d
  mov    $0x1,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <write_zscore_double@plt>
  mov    -0x20a4(%rbp),%r8d
  mov    -0x20a0(%rbp),%edi
  mov    -0x2098(%rbp),%ecx
  mov    -0x2058(%rbp),%rdx
  mov    -0x2060(%rbp),%rsi
  mov    -0x2068(%rbp),%rax
  mov    %r8d,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <zscore_calc@plt>
  mov    -0x20a4(%rbp),%ecx
  mov    -0x2068(%rbp),%rdx
  mov    -0x2098(%rbp),%esi
  lea    -0x1610(%rbp),%rax
  mov    $0x0,%r9d
  mov    $0x0,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <write_zscore_double@plt>
  mov    -0x20a4(%rbp),%eax
  imul   -0x2098(%rbp),%eax
  mov    %eax,%edx
  mov    -0x2060(%rbp),%rcx
  mov    -0x2050(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <update_sum@plt>
  mov    -0x2060(%rbp),%rcx
  mov    -0x2098(%rbp),%edx
  mov    -0x20a4(%rbp),%esi
  lea    -0x1010(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <write_data_double@plt>
  mov    -0x20a4(%rbp),%eax
  imul   -0x2098(%rbp),%eax
  mov    %eax,%edx
  mov    -0x2058(%rbp),%rcx
  mov    -0x2050(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <update_sum2@plt>
  mov    -0x2058(%rbp),%rcx
  mov    -0x2098(%rbp),%edx
  mov    -0x20a4(%rbp),%esi
  lea    -0xe10(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <write_data_double@plt>
  mov    -0x20a4(%rbp),%eax
  imul   -0x2098(%rbp),%eax
  mov    %eax,%edx
  mov    -0x20a0(%rbp),%ecx
  mov    -0x2048(%rbp),%rsi
  mov    -0x2050(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <update_mean@plt>
  mov    -0x2048(%rbp),%rcx
  mov    -0x2098(%rbp),%edx
  mov    -0x20a4(%rbp),%esi
  lea    -0xc10(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <write_data_double@plt>
  mov    -0x20a4(%rbp),%eax
  lea    -0x1(%rax),%edi
  mov    -0x2038(%rbp),%rdx
  mov    -0x209c(%rbp),%esi
  mov    -0x2040(%rbp),%rax
  mov    $0x1,%r9d
  mov    $0x0,%r8d
  mov    %rdx,%rcx
  mov    %edi,%edx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <modify_C@plt>
  mov    -0x209c(%rbp),%r9d
  mov    -0x2050(%rbp),%r8
  mov    -0x2038(%rbp),%rcx
  mov    -0x2028(%rbp),%rdx
  mov    -0x2030(%rbp),%rsi
  mov    -0x2020(%rbp),%rax
  sub    $0x8,%rsp
  push   $0x1
  lea    -0x2088(%rbp),%rdi
  push   %rdi
  mov    -0x20a4(%rbp),%edi
  push   %rdi
  mov    -0x2094(%rbp),%edi
  push   %rdi
  mov    -0x2098(%rbp),%edi
  push   %rdi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <var_data@plt>
  add    $0x30,%rsp
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,-0x2078(%rbp)
  movsd  -0x2088(%rbp),%xmm0
  mov    -0x2078(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  lea    D29(%rip),%rax
  mov    %rax,%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  mov    -0x209c(%rbp),%r9d
  mov    -0x2050(%rbp),%r8
  mov    -0x2038(%rbp),%rcx
  mov    -0x2028(%rbp),%rdx
  mov    -0x2030(%rbp),%rsi
  mov    -0x2020(%rbp),%rax
  sub    $0x8,%rsp
  push   $0x2
  lea    -0x2080(%rbp),%rdi
  push   %rdi
  mov    -0x20a4(%rbp),%edi
  push   %rdi
  mov    -0x2094(%rbp),%edi
  push   %rdi
  mov    -0x2098(%rbp),%edi
  push   %rdi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <var_data@plt>
  add    $0x30,%rsp
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,-0x2070(%rbp)
  movsd  -0x2080(%rbp),%xmm0
  mov    -0x2070(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  lea    D29(%rip),%rax
  mov    %rax,%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  movsd  -0x2088(%rbp),%xmm0
  mov    -0x2078(%rbp),%rcx
  mov    -0x20a0(%rbp),%edx
  lea    -0x2090(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rcx,%xmm0
  mov    %edx,%esi
  mov    %rax,%rdi
  mov    $0x2,%eax
  call   <update_deviance@plt>
  mov    -0x2090(%rbp),%rdx
  movsd  D28(%rip),%xmm0
  lea    -0x1410(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rdx,%xmm0
  mov    %rax,%rdi
  mov    $0x2,%eax
  call   <write_DIC@plt>
  mov    -0x2018(%rbp),%r9
  mov    -0x2050(%rbp),%r8
  mov    -0x2038(%rbp),%rcx
  mov    -0x2028(%rbp),%rdx
  mov    -0x2030(%rbp),%rsi
  mov    -0x2020(%rbp),%rax
  mov    -0x20a4(%rbp),%edi
  push   %rdi
  mov    -0x2094(%rbp),%edi
  push   %rdi
  mov    -0x2098(%rbp),%edi
  push   %rdi
  mov    -0x209c(%rbp),%edi
  push   %rdi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <inputation_lfmm@plt>
  add    $0x20,%rsp
  mov    -0x2020(%rbp),%rcx
  mov    -0x2098(%rbp),%edx
  mov    -0x209c(%rbp),%esi
  lea    -0x1210(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <write_data_float@plt>
  mov    -0x2068(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x2060(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x2058(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x2050(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x2048(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x2040(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x2038(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x2030(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x2028(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x2020(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x2018(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L7
  call   <__stack_chk_fail@plt>
L7:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: data_tag: D17
type: f64
name: retrieve_data
arguments: data_tag: D18
type: f64
name: retrieve_data
arguments: data_tag: D29
type: string
name: retrieve_data
arguments: data_tag: D28
type: f64

tool: D17: 2.1

tool: D18: 10

tool: D29: %g %g


tool: D28: 1

assistant: ```c
int main(int argc, char *argv[]) {
  char input_sum[512];
  char input_sum2[512];
  char input_mean[512];
  char input_beta[512];
  char output_zscore1[512];
  char output_zscore2[512];
  char output_DIC[512];
  char output_R[512];
  char output_sum[512];
  char output_sum2[512];
  char output_mean[512];
  char input_R[512];
  char input_C[512];
  char input_U[512];
  char input_V[512];
  char input_I[512];
  double *zscore, *sum, *sum2, *beta, *mean, *C, *U, *V, *CC;
  float *R;
  int D = 3, cur = 10, *I;
  double deviance = 2.1, var1 = 0, var2 = 0;
  double thrd_m1 = 10.0, thrd_m2 = 10.0;
  int N = 10, M = 100, K = 2;
  strcpy(input_sum, argv[1]);
  strcpy(input_sum2, argv[2]);
  strcpy(input_mean, argv[3]);
  strcpy(input_beta, argv[4]);
  strcpy(input_R, argv[5]);
  strcpy(input_C, argv[6]);
  strcpy(input_U, argv[7]);
  strcpy(input_V, argv[8]);
  strcpy(input_I, argv[9]);
  N = (int)atoi(argv[10]);
  D = (int)atoi(argv[11]);
  strcpy(output_DIC, argv[12]);
  strcpy(output_zscore1, argv[13]);
  strcpy(output_zscore2, argv[14]);
  strcpy(output_R, argv[15]);
  strcpy(output_sum, argv[16]);
  strcpy(output_sum2, argv[17]);
  strcpy(output_mean, argv[18]);
  zscore = (double *)malloc(M * D * sizeof(double));
  sum = (double *)malloc(M * D * sizeof(double));
  sum2 = (double *)malloc(M * D * sizeof(double));
  beta = (double *)malloc(M * D * sizeof(double));
  mean = (double *)malloc(M * D * sizeof(double));
  C = (double *)malloc(N * (D - 1) * sizeof(double));
  CC = (double *)malloc(N * D * sizeof(double));
  U = (double *)malloc(N * K * sizeof(double));
  V = (double *)malloc(M * K * sizeof(double));
  R = (float *)malloc(N * M * sizeof(float));
  I = (int *)malloc(N * M * sizeof(int));
  read_data_double(input_sum, D, M, sum);
  read_data_double(input_sum2, D, M, sum2);
  read_data_double(input_mean, D, M, mean);
  read_data_double(input_beta, D, M, beta);
  read_data_double(input_V, K, M, V);
  read_data_double(input_U, K, N, U);
  read_data_float(input_R, N, M, R);
  read_data_double(input_C, N, D - 1, C);
  read_data_int(input_I, N, M, I);
  zscore_calc(zscore, sum, sum2, M, cur, D);
  write_zscore_double(output_zscore1, M, zscore, D - 1, 1, 0);
  zscore_calc(zscore, sum, sum2, M, cur, D);
  write_zscore_double(output_zscore2, M, zscore, D, 0, 0);
  update_sum(beta, sum, D * M);
  write_data_double(output_sum, D, M, sum);
  update_sum2(beta, sum2, D * M);
  write_data_double(output_sum2, D, M, sum2);
  update_mean(beta, mean, D * M, cur);
  write_data_double(output_mean, D, M, mean);
  modify_C(C, N, D - 1, CC, 0, 1);
  var1 = var_data(R, U, V, CC, beta, N, M, K, D, &thrd_m1, 1);
  printf("%g %g\n", var1, thrd_m1);
  var2 = var_data(R, U, V, CC, beta, N, M, K, D, &thrd_m2, 2);
  printf("%g %g\n", var2, thrd_m2);
  update_deviance(&deviance, cur, var1, thrd_m1);
  write_DIC(output_DIC, deviance, 1.0);
  inputation_lfmm(R, U, V, CC, beta, I, N, M, K, D);
  write_data_float(output_R, N, M, R);
  free(zscore);
  free(sum);
  free(sum2);
  free(beta);
  free(mean);
  free(C);
  free(CC);
  free(U);
  free(V);
  free(R);
  free(I);
  return 0;
}
```