user: 下面的汇编指令对应的C源代码是什么:

```asm
<digitize_one>:
  endbr64
  push   %r12
  movapd %xmm0,%xmm2
  movapd %xmm1,%xmm3
  push   %rbp
  push   %rbx
  mov    %rdi,%rbx
  imul   %rdi,%rbx
  sub    $0x20,%rsp
  test   %rsi,%rsi
  je     L24
  mov    %rdi,%r12
  lea    D45(%rip),%rsi
  mov    %rdx,%rdi
  mov    %rdx,%rbp
  movsd  %xmm1,0x8(%rsp)
  movsd  %xmm0,(%rsp)
  call   <strcmp@plt>
  movsd  (%rsp),%xmm2
  movsd  0x8(%rsp),%xmm3
  test   %eax,%eax
  je     L215
  lea    D58(%rip),%rsi
  mov    %rbp,%rdi
  movsd  %xmm3,0x8(%rsp)
  movsd  %xmm2,(%rsp)
  call   <strcmp@plt>
  movsd  (%rsp),%xmm2
  movsd  0x8(%rsp),%xmm3
  test   %eax,%eax
  je     L431
  lea    D28(%rip),%rsi
  mov    %rbp,%rdi
  movsd  %xmm3,0x8(%rsp)
  movsd  %xmm2,(%rsp)
  call   <strcmp@plt>
  movsd  (%rsp),%xmm2
  movsd  0x8(%rsp),%xmm3
  test   %eax,%eax
  je     L120
  lea    D55(%rip),%rsi
  mov    %rbp,%rdi
  movsd  %xmm3,0x8(%rsp)
  movsd  %xmm2,(%rsp)
  call   <strcmp@plt>
  movsd  (%rsp),%xmm2
  movsd  0x8(%rsp),%xmm3
  test   %eax,%eax
  je     L159
  lea    D128(%rip),%rsi
  mov    %rbp,%rdi
  movsd  %xmm3,0x8(%rsp)
  movsd  %xmm2,(%rsp)
  call   <strcmp@plt>
  movsd  (%rsp),%xmm2
  movsd  0x8(%rsp),%xmm3
  test   %eax,%eax
  je     L251
  lea    D42(%rip),%rsi
  mov    %rbp,%rdi
  movsd  %xmm3,0x8(%rsp)
  movsd  %xmm2,(%rsp)
  call   <strcmp@plt>
  mov    %eax,%r8d
  xor    %eax,%eax
  test   %r8d,%r8d
  jne    L337
  pxor   %xmm1,%xmm1
  pxor   %xmm4,%xmm4
  movsd  (%rsp),%xmm2
  movsd  0x8(%rsp),%xmm3
  cvtsi2sd %rbx,%xmm1
  ucomisd %xmm1,%xmm4
  ja     L269
  sqrtsd %xmm1,%xmm1
  cvttsd2si %xmm1,%rbx
  mov    %rbx,%rbp
L95:
  movapd %xmm3,%xmm1
  movapd %xmm2,%xmm0
  mulsd  %xmm3,%xmm1
  mulsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  ucomisd %xmm0,%xmm4
  ja     L0
L52:
  addsd  D173(%rip),%xmm3
  pxor   %xmm0,%xmm0
  movsd  %xmm2,(%rsp)
  mulsd  D176(%rip),%xmm3
  cvtsi2sd %rbp,%xmm0
  mulsd  %xmm3,%xmm0
  call   <floor@plt>
  movsd  (%rsp),%xmm2
  addsd  D173(%rip),%xmm2
  cvttsd2si %xmm0,%r12
  mulsd  D176(%rip),%xmm2
  pxor   %xmm0,%xmm0
  cvtsi2sd %rbx,%xmm0
  mulsd  %xmm2,%xmm0
  call   <floor@plt>
  xor    %eax,%eax
  test   %r12,%r12
  lea    -0x1(%rbp),%rdx
  cvttsd2si %xmm0,%rcx
  cmovns %r12,%rax
  lea    -0x1(%rbx),%rsi
  cmp    %rbp,%r12
  cmovge %rdx,%rax
  xor    %edx,%edx
  test   %rcx,%rcx
  cmovns %rcx,%rdx
  cmp    %rcx,%rbx
  cmovle %rsi,%rdx
  imul   %rbx,%rax
  add    %rdx,%rax
  jmp    L337
  nopl   0x0(%rax,%rax,1)
L215:
  movapd %xmm3,%xmm1
  movapd %xmm2,%xmm0
  mulsd  %xmm3,%xmm1
  mulsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  comisd D41(%rip),%xmm0
  jbe    L147
  mov    D41(%rip),%rax
  pxor   %xmm4,%xmm4
  movq   %rax,%xmm0
L90:
  sqrtsd %xmm0,%xmm0
L189:
  ucomisd %xmm0,%xmm4
  ja     L62
  sqrtsd %xmm0,%xmm0
L116:
  ucomisd %xmm0,%xmm4
  ja     L405
  sqrtsd %xmm0,%xmm0
L349:
  pxor   %xmm1,%xmm1
  xor    %ebx,%ebx
  lea    -0x1(%r12),%rdx
  cvtsi2sd %r12,%xmm1
  mulsd  %xmm0,%xmm1
  movapd %xmm3,%xmm0
  cvttsd2si %xmm1,%rax
  movapd %xmm2,%xmm1
  test   %rax,%rax
  cmovns %rax,%rbx
  cmp    %rax,%r12
  cmovle %rdx,%rbx
  call   <atan2@plt>
  pxor   %xmm1,%xmm1
  addsd  D21(%rip),%xmm0
  xor    %eax,%eax
  lea    (%rbx,%rbx,1),%rbp
  divsd  D136(%rip),%xmm0
  lea    0x1(%rbp),%r12
  cvtsi2sd %r12,%xmm1
  mulsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%rdx
  test   %rdx,%rdx
  cmovns %rdx,%rax
  cmp    %rdx,%r12
  cmovg  %rax,%rbp
  imul   %rbx,%rbx
  add    $0x20,%rsp
  lea    (%rbx,%rbp,1),%rax
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  nopl   0x0(%rax)
L24:
  mulsd  %xmm0,%xmm2
  pxor   %xmm0,%xmm0
  mulsd  %xmm1,%xmm3
  addsd  %xmm3,%xmm2
  ucomisd %xmm2,%xmm0
  ja     L278
  sqrtsd %xmm2,%xmm2
L77:
  addsd  D41(%rip),%xmm2
  pxor   %xmm0,%xmm0
  mulsd  D156(%rip),%xmm2
  cvtsi2sd %rbx,%xmm0
  mulsd  %xmm2,%xmm0
  call   <floor@plt>
  xor    %eax,%eax
  lea    -0x1(%rbx),%rcx
  cvttsd2si %xmm0,%rdx
  test   %rdx,%rdx
  cmovns %rdx,%rax
  cmp    %rdx,%rbx
  cmovle %rcx,%rax
L337:
  add    $0x20,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  nopw   0x0(%rax,%rax,1)
L147:
  pxor   %xmm4,%xmm4
  ucomisd %xmm0,%xmm4
  jbe    L90
  movsd  %xmm4,0x10(%rsp)
  movsd  %xmm3,0x8(%rsp)
  movsd  %xmm2,(%rsp)
  call   <sqrt@plt>
  movsd  0x10(%rsp),%xmm4
  movsd  0x8(%rsp),%xmm3
  movsd  (%rsp),%xmm2
  jmp    L189
  nopw   0x0(%rax,%rax,1)
L120:
  pxor   %xmm0,%xmm0
  pxor   %xmm4,%xmm4
  cvtsi2sd %rbx,%xmm0
  ucomisd %xmm0,%xmm4
  ja     L236
  sqrtsd %xmm0,%xmm0
L298:
  cvttsd2si %xmm0,%rbp
  movapd %xmm3,%xmm1
  movapd %xmm2,%xmm0
  mulsd  %xmm3,%xmm1
  mulsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  ucomisd %xmm0,%xmm4
  ja     L238
  sqrtsd %xmm0,%xmm0
L167:
  pxor   %xmm5,%xmm5
  movsd  %xmm4,0x18(%rsp)
  xor    %ebx,%ebx
  cvtsi2sd %rbp,%xmm5
  movsd  %xmm3,0x10(%rsp)
  movsd  %xmm2,0x8(%rsp)
  mulsd  %xmm5,%xmm0
  movsd  %xmm5,(%rsp)
  call   <floor@plt>
  movsd  0x8(%rsp),%xmm2
  movsd  0x10(%rsp),%xmm3
  lea    -0x1(%rbp),%rdx
  cvttsd2si %xmm0,%rax
  movapd %xmm2,%xmm1
  movapd %xmm3,%xmm0
  test   %rax,%rax
  cmovns %rax,%rbx
  cmp    %rax,%rbp
  cmovle %rdx,%rbx
  call   <atan2@plt>
  movsd  0x18(%rsp),%xmm4
  movsd  (%rsp),%xmm5
  movsd  D136(%rip),%xmm1
  comisd %xmm0,%xmm4
  ja     L16
L229:
  divsd  %xmm1,%xmm0
  mulsd  %xmm5,%xmm0
  call   <floor@plt>
  xor    %eax,%eax
  lea    -0x1(%rbp),%rcx
  cvttsd2si %xmm0,%rdx
  test   %rdx,%rdx
  cmovns %rdx,%rax
  cmp    %rdx,%rbp
  cmovle %rcx,%rax
  imul   %rbp,%rbx
  add    %rbx,%rax
  jmp    L337
  nopl   0x0(%rax)
L431:
  pxor   %xmm0,%xmm0
  pxor   %xmm4,%xmm4
  cvtsi2sd %rbx,%xmm0
  ucomisd %xmm0,%xmm4
  ja     L67
  sqrtsd %xmm0,%xmm0
L137:
  cvttsd2si %xmm0,%rbp
  movapd %xmm3,%xmm1
  movapd %xmm2,%xmm0
  mulsd  %xmm3,%xmm1
  mulsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  ucomisd %xmm0,%xmm4
  ja     L443
  sqrtsd %xmm0,%xmm0
L422:
  ucomisd %xmm0,%xmm4
  ja     L399
  sqrtsd %xmm0,%xmm0
L214:
  pxor   %xmm1,%xmm1
  xor    %ebx,%ebx
  lea    -0x1(%rbp),%rdx
  movsd  %xmm4,(%rsp)
  cvtsi2sd %rbp,%xmm1
  mulsd  %xmm0,%xmm1
  movapd %xmm3,%xmm0
  cvttsd2si %xmm1,%rax
  movapd %xmm2,%xmm1
  test   %rax,%rax
  cmovns %rax,%rbx
  cmp    %rax,%rbp
  cmovle %rdx,%rbx
  call   <atan2@plt>
  movsd  (%rsp),%xmm4
  movsd  D136(%rip),%xmm1
  lea    (%rbx,%rbx,1),%rbp
  comisd %xmm0,%xmm4
  lea    0x1(%rbp),%r12
  jbe    L177
  addsd  %xmm1,%xmm0
L177:
  divsd  %xmm1,%xmm0
  pxor   %xmm2,%xmm2
  xor    %eax,%eax
  cvtsi2sd %r12,%xmm2
  mulsd  %xmm0,%xmm2
  cvttsd2si %xmm2,%rdx
  test   %rdx,%rdx
  cmovns %rdx,%rax
  cmp    %rdx,%r12
  cmovg  %rax,%rbp
  imul   %rbx,%rbx
  add    $0x20,%rsp
  lea    (%rbx,%rbp,1),%rax
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  xchg   %ax,%ax
L16:
  addsd  %xmm1,%xmm0
  jmp    L229
  nopl   0x0(%rax)
L159:
  pxor   %xmm0,%xmm0
  pxor   %xmm4,%xmm4
  cvtsi2sd %rbx,%xmm0
  ucomisd %xmm0,%xmm4
  ja     L439
  sqrtsd %xmm0,%xmm0
L311:
  cvttsd2si %xmm0,%rbp
  movapd %xmm3,%xmm1
  movapd %xmm2,%xmm0
  mulsd  %xmm3,%xmm1
  mulsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  ucomisd %xmm0,%xmm4
  ja     L87
  sqrtsd %xmm0,%xmm0
  movsd  %xmm0,(%rsp)
L328:
  movapd %xmm2,%xmm1
  movapd %xmm3,%xmm0
  movsd  %xmm4,0x8(%rsp)
  call   <atan2@plt>
  movsd  0x8(%rsp),%xmm4
  movsd  D136(%rip),%xmm1
  comisd %xmm0,%xmm4
  jbe    L74
  addsd  %xmm1,%xmm0
L74:
  divsd  %xmm1,%xmm0
  pxor   %xmm2,%xmm2
  xor    %ebx,%ebx
  cvtsi2sd %rbp,%xmm2
  movsd  %xmm2,0x8(%rsp)
  mulsd  %xmm2,%xmm0
  call   <floor@plt>
  lea    -0x1(%rbp),%rdx
  movsd  0x8(%rsp),%xmm2
  cvttsd2si %xmm0,%rax
  movsd  (%rsp),%xmm0
  mulsd  %xmm2,%xmm0
  test   %rax,%rax
  cmovns %rax,%rbx
  cmp    %rax,%rbp
  cmovle %rdx,%rbx
  test   $0x1,%bl
  jne    L222
  addsd  D156(%rip),%xmm0
L222:
  call   <floor@plt>
  xor    %eax,%eax
  lea    -0x1(%rbp),%rcx
  cvttsd2si %xmm0,%rdx
  test   %rdx,%rdx
  cmovns %rdx,%rax
  cmp    %rbp,%rdx
  cmovge %rcx,%rax
  imul   %rbp,%rax
  add    %rbx,%rax
  jmp    L337
  nopl   (%rax)
L251:
  pxor   %xmm0,%xmm0
  pxor   %xmm4,%xmm4
  cvtsi2sd %rbx,%xmm0
  ucomisd %xmm0,%xmm4
  ja     L462
  sqrtsd %xmm0,%xmm0
L93:
  cvttsd2si %xmm0,%rbx
  movapd %xmm3,%xmm1
  movapd %xmm2,%xmm0
  mulsd  %xmm3,%xmm1
  mulsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  ucomisd %xmm0,%xmm4
  ja     L193
  sqrtsd %xmm0,%xmm0
  movsd  %xmm0,(%rsp)
L33:
  movapd %xmm2,%xmm1
  movapd %xmm3,%xmm0
  movsd  %xmm4,0x8(%rsp)
  call   <atan2@plt>
  movsd  0x8(%rsp),%xmm4
  movsd  D136(%rip),%xmm1
  comisd %xmm0,%xmm4
  jbe    L471
  addsd  %xmm1,%xmm0
L471:
  divsd  %xmm1,%xmm0
  pxor   %xmm2,%xmm2
  lea    -0x1(%rbx),%r12
  xor    %ebp,%ebp
  cvtsi2sd %rbx,%xmm2
  movsd  %xmm2,0x8(%rsp)
  mulsd  %xmm2,%xmm0
  call   <floor@plt>
  movsd  0x8(%rsp),%xmm2
  cvttsd2si %xmm0,%rax
  pxor   %xmm0,%xmm0
  test   %rax,%rax
  cmovns %rax,%rbp
  cmp    %rax,%rbx
  cmovle %r12,%rbp
  cvtsi2sd %rbp,%xmm0
  divsd  %xmm2,%xmm0
  mulsd  (%rsp),%xmm2
  addsd  %xmm2,%xmm0
  call   <floor@plt>
  xor    %eax,%eax
  cvttsd2si %xmm0,%rdx
  test   %rdx,%rdx
  cmovns %rdx,%rax
  cmp    %rdx,%rbx
  cmovle %r12,%rax
  imul   %rbx,%rax
  add    %rbp,%rax
  jmp    L337
L405:
  movsd  %xmm3,0x8(%rsp)
  movsd  %xmm2,(%rsp)
  call   <sqrt@plt>
  movsd  0x8(%rsp),%xmm3
  movsd  (%rsp),%xmm2
  jmp    L349
L62:
  movsd  %xmm4,0x10(%rsp)
  movsd  %xmm3,0x8(%rsp)
  movsd  %xmm2,(%rsp)
  call   <sqrt@plt>
  movsd  0x10(%rsp),%xmm4
  movsd  0x8(%rsp),%xmm3
  movsd  (%rsp),%xmm2
  jmp    L116
L278:
  movapd %xmm2,%xmm0
  call   <sqrt@plt>
  movapd %xmm0,%xmm2
  jmp    L77
L67:
  movsd  %xmm4,0x10(%rsp)
  movsd  %xmm3,0x8(%rsp)
  movsd  %xmm2,(%rsp)
  call   <sqrt@plt>
  movsd  0x10(%rsp),%xmm4
  movsd  0x8(%rsp),%xmm3
  movsd  (%rsp),%xmm2
  jmp    L137
L399:
  movsd  %xmm4,0x10(%rsp)
  movsd  %xmm3,0x8(%rsp)
  movsd  %xmm2,(%rsp)
  call   <sqrt@plt>
  movsd  0x10(%rsp),%xmm4
  movsd  0x8(%rsp),%xmm3
  movsd  (%rsp),%xmm2
  jmp    L214
L443:
  movsd  %xmm4,0x10(%rsp)
  movsd  %xmm3,0x8(%rsp)
  movsd  %xmm2,(%rsp)
  call   <sqrt@plt>
  movsd  0x10(%rsp),%xmm4
  movsd  0x8(%rsp),%xmm3
  movsd  (%rsp),%xmm2
  jmp    L422
L238:
  movsd  %xmm4,0x10(%rsp)
  movsd  %xmm3,0x8(%rsp)
  movsd  %xmm2,(%rsp)
  call   <sqrt@plt>
  movsd  0x10(%rsp),%xmm4
  movsd  0x8(%rsp),%xmm3
  movsd  (%rsp),%xmm2
  jmp    L167
L236:
  movsd  %xmm4,0x10(%rsp)
  movsd  %xmm3,0x8(%rsp)
  movsd  %xmm2,(%rsp)
  call   <sqrt@plt>
  movsd  0x10(%rsp),%xmm4
  movsd  0x8(%rsp),%xmm3
  movsd  (%rsp),%xmm2
  jmp    L298
L0:
  movsd  %xmm3,0x8(%rsp)
  movsd  %xmm2,(%rsp)
  call   <sqrt@plt>
  movsd  0x8(%rsp),%xmm3
  movsd  (%rsp),%xmm2
  jmp    L52
L269:
  movapd %xmm1,%xmm0
  movsd  %xmm4,0x18(%rsp)
  movsd  %xmm3,0x10(%rsp)
  movsd  %xmm2,0x8(%rsp)
  movsd  %xmm1,(%rsp)
  call   <sqrt@plt>
  movsd  (%rsp),%xmm1
  cvttsd2si %xmm0,%rbp
  movapd %xmm1,%xmm0
  call   <sqrt@plt>
  movsd  0x18(%rsp),%xmm4
  movsd  0x10(%rsp),%xmm3
  cvttsd2si %xmm0,%rbx
  movsd  0x8(%rsp),%xmm2
  jmp    L95
L193:
  movsd  %xmm4,0x18(%rsp)
  movsd  %xmm3,0x10(%rsp)
  movsd  %xmm2,0x8(%rsp)
  call   <sqrt@plt>
  movsd  0x18(%rsp),%xmm4
  movsd  0x10(%rsp),%xmm3
  movsd  0x8(%rsp),%xmm2
  movsd  %xmm0,(%rsp)
  jmp    L33
L462:
  movsd  %xmm4,0x10(%rsp)
  movsd  %xmm3,0x8(%rsp)
  movsd  %xmm2,(%rsp)
  call   <sqrt@plt>
  movsd  0x10(%rsp),%xmm4
  movsd  0x8(%rsp),%xmm3
  movsd  (%rsp),%xmm2
  jmp    L93
L87:
  movsd  %xmm4,0x18(%rsp)
  movsd  %xmm3,0x10(%rsp)
  movsd  %xmm2,0x8(%rsp)
  call   <sqrt@plt>
  movsd  0x18(%rsp),%xmm4
  movsd  0x10(%rsp),%xmm3
  movsd  0x8(%rsp),%xmm2
  movsd  %xmm0,(%rsp)
  jmp    L328
L439:
  movsd  %xmm4,0x10(%rsp)
  movsd  %xmm3,0x8(%rsp)
  movsd  %xmm2,(%rsp)
  call   <sqrt@plt>
  movsd  0x10(%rsp),%xmm4
  movsd  0x8(%rsp),%xmm3
  movsd  (%rsp),%xmm2
  jmp    L311
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D45
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D58
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D28
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D55
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D128
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D42
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D173
type_guessed: f64
name: extract_symbolic_data
arguments: data_tag: D176
type_guessed: f64
name: extract_symbolic_data
arguments: data_tag: D41
type_guessed: f64[2]
name: extract_symbolic_data
arguments: data_tag: D21
type_guessed: f64
name: extract_symbolic_data
arguments: data_tag: D136
type_guessed: byte[8]
name: extract_symbolic_data
arguments: data_tag: D156
type_guessed: f64

tool: D45: old

tool: D58: maze

tool: D28: dart

tool: D55: stagger

tool: D128: spiral

tool: D42: chess

tool: D173: 0.125

tool: D176: 4

tool: {"D41": [1.0,0.5]}

tool: D21: 3.141592653589793

tool: {"D136": [0x18,0x2d,0x44,0x54,0xfb,0x21,0x19,0x40]}

tool: D156: 0.5

assistant: ```c
long digitize_one(double c, double s, long nbin1, long idx, char *partition) {
  long is, ic, ir, ncol, nrow, nannuli, nsec;
  long one, nbin, nbin2, ibin1, ibin2;
  double angle, modulus, scaled, fs, fc, offset;
  nbin = nbin1 * nbin1;
  one = 0;
  if (idx == 0) {
    modulus = (c * c + s * s);
    modulus = sqrt(modulus);
    scaled = ((modulus + 1.0) / 2.0) * nbin;
    one = floor(scaled);
    if (one >= nbin)
      one = nbin - 1;
    else if (one < 0)
      one = 0;
  } else {
    if (strcmp(partition, "old") == 0) {
      modulus = (c * c + s * s);
      if (modulus < 0.0)
        modulus = 0.0;
      else if (modulus > 1.0)
        modulus = 1.0;
      modulus = sqrt(modulus);
      modulus = sqrt(modulus);
      modulus = sqrt(modulus);
      ibin1 = modulus * nbin1;
      if (ibin1 >= nbin1)
        ibin1 = nbin1 - 1;
      else if (ibin1 < 0)
        ibin1 = 0;
      nbin2 = 2 * ibin1 + 1;
      angle = 3.14159265358979323846 + atan2(s, c);
      ibin2 = nbin2 * (angle / (2 * 3.14159265358979323846));
      if (ibin2 >= nbin2)
        ibin2 = nbin2 - 1;
      else if (ibin2 < 0)
        ibin2 = 0;
      one = ibin1 * ibin1 + ibin2;
    } else if (strcmp(partition, "maze") == 0) {
      nannuli = sqrt((double)nbin);
      modulus = (c * c + s * s);
      modulus = sqrt(modulus);
      modulus = sqrt(modulus);
      ir = (modulus * nannuli);
      if (ir >= nannuli)
        ir = nannuli - 1;
      else if (ir < 0)
        ir = 0;
      nsec = 2 * ir + 1;
      angle = atan2(s, c);
      if (angle < 0.0)
        angle += 2.0 * 3.14159265358979323846;
      is = nsec * (angle / (2.0 * 3.14159265358979323846));
      if (is >= nsec)
        is = nsec - 1;
      else if (is < 0)
        is = 0;
      one = ir * ir + is;
    } else if (strcmp(partition, "dart") == 0) {
      nannuli = (long)sqrt((double)nbin);
      nsec = nannuli;
      modulus = (c * c + s * s);
      modulus = sqrt(modulus);
      ir = (long)floor((modulus * nannuli));
      if (ir >= nannuli)
        ir = nannuli - 1;
      else if (ir < 0)
        ir = 0;
      angle = atan2(s, c);
      if (angle < 0.0)
        angle += 2.0 * 3.14159265358979323846;
      is = (long)floor((double)nsec * (angle / (2.0 * 3.14159265358979323846)));
      if (is >= nsec)
        is = nsec - 1;
      else if (is < 0)
        is = 0;
      one = ir * nsec + is;
    } else if (strcmp(partition, "stagger") == 0) {
      nannuli = (long)sqrt((double)nbin);
      nsec = nannuli;
      modulus = (c * c + s * s);
      modulus = sqrt(modulus);
      angle = atan2(s, c);
      if (angle < 0.0)
        angle += 2.0 * 3.14159265358979323846;
      is = (long)floor((double)nsec * (angle / (2.0 * 3.14159265358979323846)));
      if (is >= nsec)
        is = nsec - 1;
      else if (is < 0)
        is = 0;
      if (is % 2)
        ir = (long)floor(modulus * nannuli);
      else
        ir = (long)floor(modulus * nannuli + 0.5);
      if (ir >= nannuli)
        ir = nannuli - 1;
      else if (ir < 0)
        ir = 0;
      one = ir * nsec + is;
    } else if (strcmp(partition, "spiral") == 0) {
      nannuli = (long)sqrt((double)nbin);
      nsec = nannuli;
      modulus = (c * c + s * s);
      modulus = sqrt(modulus);
      angle = atan2(s, c);
      if (angle < 0.0)
        angle += 2.0 * 3.14159265358979323846;
      is = (long)floor((double)nsec * (angle / (2.0 * 3.14159265358979323846)));
      if (is >= nsec)
        is = nsec - 1;
      else if (is < 0)
        is = 0;
      offset = ((double)is) / ((double)nsec);
      ir = (long)floor(modulus * nannuli + offset);
      if (ir >= nannuli)
        ir = nannuli - 1;
      else if (ir < 0)
        ir = 0;
      one = ir * nsec + is;
    } else if (strcmp(partition, "chess") == 0) {
      nrow = (long)floor(sqrt((double)nbin));
      ncol = (long)floor(sqrt((double)nbin));
      modulus = (c * c + s * s);
      modulus = sqrt(modulus);
      fs = 4.0 * (s + 0.125) * nrow;
      is = (long)floor(fs);
      fc = 4.0 * (c + 0.125) * ncol;
      ic = (long)floor(fc);
      if (is >= nrow)
        is = nrow - 1;
      else if (is < 0)
        is = 0;
      if (ic >= ncol)
        ic = ncol - 1;
      else if (ic < 0)
        ic = 0;
      one = is * ncol + ic;
    } else
      return (0);
  }
  return (one);
}
```