user: Converte this assembly snippet into its equivalent C code:

```asm
<stdlib_strided_snanvariancech>:
  endbr64
  test   %rdi,%rdi
  jle    L84
  cmp    $0x1,%rdi
  je     L38
  test   %rdx,%rdx
  je     L38
  mov    $0x0,%ecx
  js     L141
L140:
  xor    %eax,%eax
  nopl   0x0(%rax)
L96:
  movss  (%rsi,%rcx,4),%xmm2
  ucomiss %xmm2,%xmm2
  jnp    L40
  add    $0x1,%rax
  add    %rdx,%rcx
  cmp    %rax,%rdi
  jne    L96
L84:
  pxor   %xmm3,%xmm3
L57:
  divss  %xmm3,%xmm3
  movaps %xmm3,%xmm0
  ret
  nopw   0x0(%rax,%rax,1)
L38:
  movss  (%rsi),%xmm1
  ucomiss %xmm1,%xmm1
  jp     L84
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm0
  pxor   %xmm3,%xmm3
  cvtsi2sd %rdi,%xmm1
  subsd  %xmm0,%xmm1
  comisd D11(%rip),%xmm1
  jbe    L57
  movaps %xmm3,%xmm0
  ret
  nopl   0x0(%rax)
L40:
  cmp    %rax,%rdi
  je     L84
  add    $0x1,%rax
  add    %rdx,%rcx
  cmp    %rax,%rdi
  jle    L91
  pxor   %xmm3,%xmm3
  lea    (%rsi,%rcx,4),%rcx
  shl    $0x2,%rdx
  mov    $0x1,%esi
  movaps %xmm3,%xmm4
  movaps %xmm3,%xmm5
  nopl   0x0(%rax)
L69:
  movss  (%rcx),%xmm1
  ucomiss %xmm1,%xmm1
  jp     L22
  subss  %xmm2,%xmm1
  add    $0x1,%rsi
  movaps %xmm1,%xmm6
  addss  %xmm1,%xmm4
  mulss  %xmm1,%xmm6
  addss  %xmm6,%xmm5
L22:
  add    $0x1,%rax
  add    %rdx,%rcx
  cmp    %rax,%rdi
  jne    L69
  pxor   %xmm2,%xmm2
  cvtsi2sd %rsi,%xmm2
L60:
  movapd %xmm2,%xmm1
  cvtss2sd %xmm0,%xmm0
  subsd  %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  comisd %xmm1,%xmm0
  jae    L57
  cvtss2sd %xmm4,%xmm4
  movapd %xmm4,%xmm0
  cvtss2sd %xmm5,%xmm5
  pxor   %xmm3,%xmm3
  divsd  %xmm2,%xmm0
  divsd  %xmm1,%xmm4
  cvtsd2ss %xmm0,%xmm0
  divsd  %xmm1,%xmm5
  cvtsd2ss %xmm4,%xmm4
  mulss  %xmm4,%xmm0
  cvtsd2ss %xmm5,%xmm3
  subss  %xmm0,%xmm3
  movaps %xmm3,%xmm0
  ret
  nopl   0x0(%rax,%rax,1)
L141:
  mov    $0x1,%ecx
  sub    %rdi,%rcx
  imul   %rdx,%rcx
  jmp    L140
L91:
  pxor   %xmm3,%xmm3
  movsd  D18(%rip),%xmm2
  movaps %xmm3,%xmm4
  movaps %xmm3,%xmm5
  jmp    L60
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D11
type: f64
name: extract_symbolic_data
arguments: data_label: D18
type: byte[8]

tool: D11: 0

tool: {"D18": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f]}

assistant: ```c
float stdlib_strided_snanvariancech(const int64_t N, const float correction, const float *X, const int64_t stride) {
  int64_t ix;
  int64_t n;
  int64_t i;
  double dn;
  double nc;
  double dM;
  float M2;
  float mu;
  float M;
  float d;
  float v;
  if (N <= 0) {
    return 0.0f / 0.0f;
  }
  if (N == 1 || stride == 0) {
    v = X[0];
    if (v == v && (double)N - (double)correction > 0.0) {
      return 0.0f;
    }
    return 0.0f / 0.0f;
  }
  if (stride < 0) {
    ix = (1 - N) * stride;
  } else {
    ix = 0;
  }
  for (i = 0; i < N; i++) {
    v = X[ix];
    if (v == v) {
      mu = v;
      break;
    }
    ix += stride;
  }
  if (i == N) {
    return 0.0f / 0.0f;
  }
  ix += stride;
  i += 1;
  M2 = 0.0f;
  M = 0.0f;
  n = 1;
  for (; i < N; i++) {
    v = X[ix];
    if (v == v) {
      d = v - mu;
      M2 += d * d;
      M += d;
      n += 1;
    }
    ix += stride;
  }
  dn = (double)n;
  nc = dn - (double)correction;
  if (nc <= 0.0) {
    return 0.0f / 0.0f;
  }
  dM = (double)M;
  return (float)((double)M2 / nc) - ((float)(dM / dn) * (float)(dM / nc));
}
```