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

```asm
<test_json_number_toDouble>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x340,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    D187(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D112(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x330(%rbp),%rdx
  mov    $0x0,%eax
  mov    $0x64,%ecx
  mov    %rdx,%rdi
  rep stos %rax,%es:(%rdi)
  lea    D203(%rip),%rax
  mov    %rax,-0x330(%rbp)
  lea    D291(%rip),%rax
  mov    %rax,-0x328(%rbp)
  lea    D294(%rip),%rax
  mov    %rax,-0x320(%rbp)
  lea    D20(%rip),%rax
  mov    %rax,-0x318(%rbp)
  lea    D350(%rip),%rax
  mov    %rax,-0x310(%rbp)
  lea    D74(%rip),%rax
  mov    %rax,-0x308(%rbp)
  lea    D256(%rip),%rax
  mov    %rax,-0x300(%rbp)
  lea    D51(%rip),%rax
  mov    %rax,-0x2f8(%rbp)
  lea    D148(%rip),%rax
  mov    %rax,-0x2f0(%rbp)
  lea    D24(%rip),%rax
  mov    %rax,-0x2e8(%rbp)
  lea    D55(%rip),%rax
  mov    %rax,-0x2e0(%rbp)
  lea    D289(%rip),%rax
  mov    %rax,-0x2d8(%rbp)
  lea    D100(%rip),%rax
  mov    %rax,-0x2d0(%rbp)
  lea    D286(%rip),%rax
  mov    %rax,-0x2c8(%rbp)
  lea    D37(%rip),%rax
  mov    %rax,-0x2c0(%rbp)
  lea    D95(%rip),%rax
  mov    %rax,-0x2b8(%rbp)
  lea    D298(%rip),%rax
  mov    %rax,-0x2b0(%rbp)
  lea    D263(%rip),%rax
  mov    %rax,-0x2a8(%rbp)
  lea    D353(%rip),%rax
  mov    %rax,-0x2a0(%rbp)
  lea    D91(%rip),%rax
  mov    %rax,-0x298(%rbp)
  lea    D333(%rip),%rax
  mov    %rax,-0x290(%rbp)
  lea    D127(%rip),%rax
  mov    %rax,-0x288(%rbp)
  lea    D66(%rip),%rax
  mov    %rax,-0x280(%rbp)
  lea    D146(%rip),%rax
  mov    %rax,-0x278(%rbp)
  lea    D14(%rip),%rax
  mov    %rax,-0x270(%rbp)
  lea    D83(%rip),%rax
  mov    %rax,-0x268(%rbp)
  lea    D123(%rip),%rax
  mov    %rax,-0x260(%rbp)
  lea    D324(%rip),%rax
  mov    %rax,-0x258(%rbp)
  lea    D8(%rip),%rax
  mov    %rax,-0x250(%rbp)
  lea    D229(%rip),%rax
  mov    %rax,-0x248(%rbp)
  lea    D248(%rip),%rax
  mov    %rax,-0x240(%rbp)
  movl   $0x0,-0x33c(%rbp)
  jmp    L15
L16:
  mov    -0x33c(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,%esi
  lea    D12(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x33c(%rbp),%eax
  cltq
  mov    -0x330(%rbp,%rax,8),%rax
  lea    -0x338(%rbp),%rdx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <json_number_toDouble@plt>
  test   %rax,%rax
  je     L31
  mov    -0x33c(%rbp),%eax
  cltq
  mov    -0x330(%rbp,%rax,8),%rax
  mov    %rax,%rsi
  lea    D173(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L39
L31:
  mov    -0x338(%rbp),%rdx
  mov    -0x33c(%rbp),%eax
  cltq
  mov    -0x330(%rbp,%rax,8),%rax
  movq   %rdx,%xmm0
  mov    %rax,%rsi
  lea    D79(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
L39:
  addl   $0x1,-0x33c(%rbp)
L15:
  mov    -0x33c(%rbp),%eax
  cltq
  mov    -0x330(%rbp,%rax,8),%rax
  test   %rax,%rax
  jne    L16
  lea    D279(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L47
  call   <__stack_chk_fail@plt>
L47:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D187
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D112
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D203
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D291
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D294
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D20
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D350
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D74
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D256
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D51
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D148
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D24
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D55
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D289
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D100
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D286
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D37
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D95
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D298
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D263
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D353
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D91
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D333
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D127
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D66
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D146
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D14
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D83
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D123
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D324
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D8
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D229
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D248
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D12
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D173
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D79
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D279
type_guessed: string

tool: D187: Test json_number_toDouble

tool: D112: ================================================================================

tool: D203: --123

tool: D291: abc

tool: D294: 123


tool: D20: 456

tool: D350: -

tool: D74: -abc

tool: D256: -123

tool: D51: 0

tool: D148: -0

tool: D24: 0.

tool: D55: .

tool: D289: 0.0

tool: D100: 1.2.3

tool: D286: -10.123

tool: D37: 10.e

tool: D95: 10..

tool: D298: e

tool: D263: -E

tool: D353: -0e12

tool: D91: 10.5e00abc

tool: D333: 10.5E+13

tool: D127: 8.5E-2

tool: D66: 8e

tool: D146: 123E-

tool: D14: 456E+

tool: D83: 9.e

tool: D123: 9.e99

tool: D324: 0ee

tool: 

tool: D229: 0.0eabc

tool: D248: 0.0e-abc

tool: D12: %d. 

tool: D173: %s is not number


tool: D79: %s = %f


tool: D279: ================================================================================


assistant: ```c
void test_json_number_toDouble() {
  puts("Test json_number_toDouble");
  puts("================================================================================");
  char *str[100] = {"--123", "abc", "123\n", "456", "-", "-abc", "-123", "0", "-0", "0.", ".", "0.0", "1.2.3", "-10.123", "10.e", "10..", "e", "-E", "-0e12", "10.5e00abc", "10.5E+13", "8.5E-2", "8e", "123E-", "456E+", "9.e", "9.e99", "0ee", "", "0.0eabc", "0.0e-abc"};
  int i;
  for (i = 0; str[i] != NULL; i++) {
    double number;
    printf("%d. ", i + 1);
    if (json_number_toDouble(str[i], 0, &number) != 0) {
      printf("%s is not number\n", str[i]);
    } else {
      printf("%s = %f\n", str[i], number);
    }
  }
  puts("================================================================================\n");
}
```