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

```asm
<mutation>:
  endbr64
  push   %r15
  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    L61
  mov    0xc(%rsp),%r8d
  test   %r8d,%r8d
  jle    L61
  pxor   %xmm3,%xmm3
  lea    -0x1(%r13),%eax
  movslq %r8d,%r13
  mov    %r14,%rbp
  cvtsi2ss %r8d,%xmm3
  lea    0x8(%r14,%rax,8),%rax
  shl    $0x2,%r13
  mov    %rax,0x10(%rsp)
  movss  %xmm3,0xc(%rsp)
  nopl   0x0(%rax,%rax,1)
L59:
  xor    %r15d,%r15d
  jmp    L109
  nopl   (%rax)
L103:
  call   <rand@plt>
  cltd
  idiv   %ebx
  mov    0x0(%rbp),%rax
  add    %r15,%rax
  mov    %edx,%r14d
  cmp    %r14d,(%rax)
  je     L68
L134:
  mov    %r14d,(%rax)
L23:
  add    $0x4,%r15
  cmp    %r15,%r13
  je     L41
L109:
  xor    %eax,%eax
  call   <drand48@plt>
  movss  D5(%rip),%xmm1
  divss  0xc(%rsp),%xmm1
  cvtsd2ss %xmm0,%xmm0
  comiss %xmm0,%xmm1
  jbe    L23
  mov    (%r12,%r15,2),%rax
  cmpl   $0x1,0xc(%rax)
  mov    $0x0,%eax
  jne    L103
  call   <rand@plt>
  cltd
  idiv   %ebx
  mov    0x0(%rbp),%rax
  add    %r15,%rax
  lea    0x1(%rdx),%r14d
  cmp    %r14d,(%rax)
  jne    L134
  nopl   0x0(%rax)
L68:
  mov    (%r12,%r15,2),%rax
  cmpl   $0x1,0xc(%rax)
  mov    $0x0,%eax
  je     L37
L138:
  call   <rand@plt>
  cltd
  idiv   %ebx
  mov    0x0(%rbp),%rax
  add    %r15,%rax
  cmp    %edx,(%rax)
  je     L86
L99:
  mov    %edx,(%rax)
  cmp    %edx,%r14d
  jne    L23
  mov    (%r12,%r15,2),%rax
  cmpl   $0x1,0xc(%rax)
  mov    $0x0,%eax
  jne    L138
L37:
  call   <rand@plt>
  cltd
  idiv   %ebx
  mov    0x0(%rbp),%rax
  add    %r15,%rax
  add    $0x1,%edx
  cmp    %edx,(%rax)
  jne    L99
L86:
  cmp    %edx,%r14d
  je     L68
  add    $0x4,%r15
  cmp    %r15,%r13
  jne    L109
L41:
  add    $0x8,%rbp
  cmp    0x10(%rsp),%rbp
  jne    L59
L61:
  mov    0x18(%rsp),%rax
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D5
type_guessed: f32

tool: D5: 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;
}
```