user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<main>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  lea    D17(%rip),%rbx
  sub    $0x58,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x48(%rsp)
  xor    %eax,%eax
  lea    0x40(%rsp),%r13
  lea    0x38(%rsp),%r12
  lea    0x30(%rsp),%rbp
  nopl   0x0(%rax)
L28:
  xor    %eax,%eax
  mov    %r13,%rcx
  mov    %r12,%rdx
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  call   <scanf@plt>
  pxor   %xmm4,%xmm4
  cmp    $0x3,%eax
  jne    L112
  movsd  0x38(%rsp),%xmm6
  movsd  0x40(%rsp),%xmm5
  movsd  0x30(%rsp),%xmm8
  movapd %xmm6,%xmm1
  movapd %xmm5,%xmm2
  addsd  %xmm6,%xmm1
  addsd  %xmm5,%xmm2
  movapd %xmm8,%xmm0
  mulsd  %xmm8,%xmm0
  mulsd  %xmm6,%xmm1
  mulsd  %xmm5,%xmm2
  movapd %xmm1,%xmm3
  addsd  %xmm2,%xmm3
  subsd  %xmm0,%xmm3
  ucomisd %xmm3,%xmm4
  ja     L129
  sqrtsd %xmm3,%xmm3
L8:
  mulsd  %xmm6,%xmm6
  movapd %xmm8,%xmm7
  addsd  %xmm3,%xmm3
  divsd  D20(%rip),%xmm3
  addsd  %xmm8,%xmm7
  mulsd  %xmm8,%xmm7
  subsd  %xmm6,%xmm2
  addsd  %xmm7,%xmm2
  ucomisd %xmm2,%xmm4
  ja     L17
  sqrtsd %xmm2,%xmm2
L4:
  mulsd  %xmm5,%xmm5
  addsd  %xmm2,%xmm2
  divsd  D20(%rip),%xmm2
  subsd  %xmm5,%xmm1
  addsd  %xmm7,%xmm1
  ucomisd %xmm1,%xmm4
  ja     L78
  sqrtsd %xmm1,%xmm1
L118:
  movapd %xmm3,%xmm5
  addsd  %xmm1,%xmm1
  divsd  D20(%rip),%xmm1
  addsd  %xmm2,%xmm5
  addsd  %xmm1,%xmm5
  mulsd  D53(%rip),%xmm5
  movapd %xmm5,%xmm0
  subsd  %xmm3,%xmm0
  movapd %xmm5,%xmm3
  subsd  %xmm2,%xmm3
  mulsd  %xmm5,%xmm0
  subsd  %xmm1,%xmm5
  mulsd  %xmm3,%xmm0
  mulsd  %xmm5,%xmm0
  comisd %xmm4,%xmm0
  jbe    L15
  ucomisd %xmm0,%xmm4
  ja     L124
  sqrtsd %xmm0,%xmm0
L40:
  lea    D46(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  jmp    L28
  nopl   0x0(%rax)
L15:
  lea    D38(%rip),%rdi
  call   <puts@plt>
  jmp    L28
  nopl   0x0(%rax)
L112:
  mov    0x48(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L85
  add    $0x58,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L129:
  movapd %xmm3,%xmm0
  movsd  %xmm8,0x28(%rsp)
  movsd  %xmm2,0x20(%rsp)
  movsd  %xmm5,0x18(%rsp)
  movsd  %xmm1,0x10(%rsp)
  movsd  %xmm6,0x8(%rsp)
  call   <sqrt@plt>
  movsd  0x28(%rsp),%xmm8
  pxor   %xmm4,%xmm4
  movsd  0x20(%rsp),%xmm2
  movsd  0x18(%rsp),%xmm5
  movsd  0x10(%rsp),%xmm1
  movapd %xmm0,%xmm3
  movsd  0x8(%rsp),%xmm6
  jmp    L8
L78:
  movapd %xmm1,%xmm0
  movsd  %xmm2,0x10(%rsp)
  movsd  %xmm3,0x8(%rsp)
  call   <sqrt@plt>
  movsd  0x10(%rsp),%xmm2
  movsd  0x8(%rsp),%xmm3
  pxor   %xmm4,%xmm4
  movapd %xmm0,%xmm1
  jmp    L118
L17:
  movapd %xmm2,%xmm0
  movsd  %xmm3,0x20(%rsp)
  movsd  %xmm7,0x18(%rsp)
  movsd  %xmm5,0x10(%rsp)
  movsd  %xmm1,0x8(%rsp)
  call   <sqrt@plt>
  movsd  0x20(%rsp),%xmm3
  pxor   %xmm4,%xmm4
  movsd  0x18(%rsp),%xmm7
  movsd  0x10(%rsp),%xmm5
  movsd  0x8(%rsp),%xmm1
  movapd %xmm0,%xmm2
  jmp    L4
L124:
  call   <sqrt@plt>
  jmp    L40
L85:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: tag: D17
type: string
name: disassemble_data
arguments: tag: D20
type: byte[8]
name: disassemble_data
arguments: tag: D53
type: byte[8]
name: disassemble_data
arguments: tag: D46
type: string
name: disassemble_data
arguments: tag: D38
type: string

tool: D17: %lf %lf %lf

tool: {"D20": [0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x40]}

tool: {"D53": [0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x3f]}

tool: D46: %.3lf


tool: D38: -1.000

assistant: ```c
int main() {
  double a, b, c, s, area, pre_area;
  double m1, m2, m3;
  while (scanf("%lf %lf %lf", &m1, &m2, &m3) == 3) {
    a = (2 * sqrt((2 * (m2) * (m2)) + (2 * (m3) * (m3)) + (-(m1) * (m1)))) / 3;
    b = (2 * sqrt((-(m2) * (m2)) + (2 * (m3) * (m3)) + (2 * (m1) * (m1)))) / 3;
    c = (2 * sqrt((2 * (m2) * (m2)) + (-(m3) * (m3)) + (2 * (m1) * (m1)))) / 3;
    s = (a + b + c) / 2;
    pre_area = s * (s - a) * (s - b) * (s - c);
    if (pre_area > 0) {
      area = sqrt(pre_area);
      printf("%.3lf\n", area);
    } else {
      printf("-1.000\n");
    }
  }
  return 0;
}
```