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

```asm
<mutation>:
  endbr64
  push   %r15
  mov    %r8d,%r15d
  push   %r14
  mov    %rdi,%r14
  push   %r13
  mov    %edx,%r13d
  push   %r12
  mov    %rsi,%r12
  push   %rbp
  push   %rbx
  mov    %ecx,%ebx
  sub    $0x28,%rsp
  mov    %rdi,0x18(%rsp)
  xor    %edi,%edi
  mov    %r8d,0xc(%rsp)
  call   <time@plt>
  mov    %eax,%edi
  call   <srand48@plt>
  test   %r13d,%r13d
  jle    L37
  lea    -0x1(%r13),%eax
  mov    %r14,%rbp
  lea    0x8(%r14,%rax,8),%rax
  mov    %rax,0x10(%rsp)
  lea    -0x1(%r15),%eax
  lea    0x4(,%rax,4),%r13
  xchg   %ax,%ax
L78:
  mov    0xc(%rsp),%eax
  test   %eax,%eax
  jle    L5
  pxor   %xmm3,%xmm3
  xor    %r15d,%r15d
  cvtsi2ssl 0xc(%rsp),%xmm3
  movss  %xmm3,0x8(%rsp)
  jmp    L95
  nopl   0x0(%rax)
L98:
  call   <rand@plt>
  cltd
  idiv   %ebx
  mov    %edx,%r14d
L77:
  mov    0x0(%rbp),%rax
  add    %r15,%rax
  cmp    %r14d,(%rax)
  je     L24
  mov    %r14d,(%rax)
L58:
  add    $0x4,%r15
  cmp    %r15,%r13
  je     L5
L95:
  xor    %eax,%eax
  call   <drand48@plt>
  movss  D3(%rip),%xmm1
  divss  0x8(%rsp),%xmm1
  cvtsd2ss %xmm0,%xmm0
  comiss %xmm0,%xmm1
  jbe    L58
  mov    (%r12,%r15,2),%rax
  cmpl   $0x1,0xc(%rax)
  mov    $0x0,%eax
  jne    L98
  call   <rand@plt>
  cltd
  idiv   %ebx
  lea    0x1(%rdx),%r14d
  jmp    L77
  nopw   0x0(%rax,%rax,1)
L35:
  call   <rand@plt>
  cltd
  idiv   %ebx
L16:
  mov    0x0(%rbp),%rax
  add    %r15,%rax
  cmp    %edx,(%rax)
  je     L126
  mov    %edx,(%rax)
L126:
  cmp    %edx,%r14d
  jne    L58
L24:
  mov    (%r12,%r15,2),%rax
  cmpl   $0x1,0xc(%rax)
  mov    $0x0,%eax
  jne    L35
  call   <rand@plt>
  cltd
  idiv   %ebx
  add    $0x1,%edx
  jmp    L16
  cs nopw 0x0(%rax,%rax,1)
L5:
  add    $0x8,%rbp
  cmp    0x10(%rsp),%rbp
  jne    L78
L37:
  mov    0x18(%rsp),%rax
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: read_data
arguments: label: D3
datatype: f32

tool: D3: 1

assistant: ```c
int **mutation(int **population, int **V, int number_of_individuals, int h_size, int v_size) {
  int iterator_virtual;
  int physical_position;
  int iterator_individual;
  int aux;
  float probability;
  srand48(time(NULL));
  h_size + 1;
  for (iterator_individual = 0; iterator_individual < number_of_individuals; iterator_individual++) {
    for (iterator_virtual = 0; iterator_virtual < v_size; iterator_virtual++) {
      probability = drand48() * 1.0;
      if (probability < (float)1 / v_size) {
        if (V[iterator_virtual][3] == 1) {
          physical_position = rand() % h_size + 1;
        } else {
          physical_position = rand() % h_size;
        }
        if (physical_position != population[iterator_individual][iterator_virtual])
          population[iterator_individual][iterator_virtual] = physical_position;
        else {
          aux = population[iterator_individual][iterator_virtual];
          while (physical_position == aux) {
            if (V[iterator_virtual][3] == 1) {
              physical_position = rand() % h_size + 1;
            } else {
              physical_position = rand() % h_size;
            }
            if (physical_position != population[iterator_individual][iterator_virtual])
              population[iterator_individual][iterator_virtual] = physical_position;
          }
        }
      }
    }
  }
  return population;
}
```