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

```asm
<ANTweenTimingFunctionBounceOut>:
  endbr64
  divss  %xmm3,%xmm0
  pxor   %xmm4,%xmm4
  cvtss2sd %xmm1,%xmm1
  cvtss2sd %xmm2,%xmm4
  movsd  D59(%rip),%xmm2
  cvtss2sd %xmm0,%xmm0
  comisd %xmm0,%xmm2
  ja     L1
  movsd  D121(%rip),%xmm2
  comisd %xmm0,%xmm2
  ja     L6
  movsd  D56(%rip),%xmm2
  comisd %xmm0,%xmm2
  jbe    L5
  subsd  D85(%rip),%xmm0
  pxor   %xmm3,%xmm3
  cvtsd2ss %xmm0,%xmm3
  movsd  D108(%rip),%xmm0
  cvtss2sd %xmm3,%xmm3
  mulsd  %xmm3,%xmm0
  mulsd  %xmm3,%xmm0
  addsd  D76(%rip),%xmm0
  mulsd  %xmm4,%xmm0
  addsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  ret
  nopl   0x0(%rax,%rax,1)
L6:
  subsd  D94(%rip),%xmm0
  movsd  D108(%rip),%xmm2
  pxor   %xmm3,%xmm3
  cvtsd2ss %xmm0,%xmm3
  cvtss2sd %xmm3,%xmm3
  mulsd  %xmm3,%xmm2
  pxor   %xmm0,%xmm0
  mulsd  %xmm2,%xmm3
  addsd  D46(%rip),%xmm3
  movapd %xmm3,%xmm2
  mulsd  %xmm4,%xmm2
  addsd  %xmm1,%xmm2
  cvtsd2ss %xmm2,%xmm0
  ret
  nopl   0x0(%rax)
L1:
  movsd  D108(%rip),%xmm3
  mulsd  %xmm0,%xmm3
  mulsd  %xmm0,%xmm3
  pxor   %xmm0,%xmm0
  mulsd  %xmm4,%xmm3
  movapd %xmm3,%xmm2
  addsd  %xmm1,%xmm2
  cvtsd2ss %xmm2,%xmm0
  ret
  nopl   (%rax)
L5:
  subsd  D15(%rip),%xmm0
  pxor   %xmm3,%xmm3
  cvtsd2ss %xmm0,%xmm3
  movsd  D108(%rip),%xmm0
  cvtss2sd %xmm3,%xmm3
  mulsd  %xmm3,%xmm0
  mulsd  %xmm3,%xmm0
  addsd  D10(%rip),%xmm0
  mulsd  %xmm4,%xmm0
  addsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  ret
```

tool_calls: name: unpack_data
arguments: data_label: D59
type_guessed: byte[8]
name: unpack_data
arguments: data_label: D121
type_guessed: byte[8]
name: unpack_data
arguments: data_label: D56
type_guessed: byte[8]
name: unpack_data
arguments: data_label: D85
type_guessed: byte[8]
name: unpack_data
arguments: data_label: D108
type_guessed: f64
name: unpack_data
arguments: data_label: D76
type_guessed: byte[8]
name: unpack_data
arguments: data_label: D94
type_guessed: byte[8]
name: unpack_data
arguments: data_label: D46
type_guessed: byte[8]
name: unpack_data
arguments: data_label: D15
type_guessed: byte[8]
name: unpack_data
arguments: data_label: D10
type_guessed: byte[8]

tool: {"D59": [0x46,0x17,0x5d,0x74,0xd1,0x45,0xd7,0x3f]}

tool: {"D121": [0x46,0x17,0x5d,0x74,0xd1,0x45,0xe7,0x3f]}

tool: {"D56": [0x17,0x5d,0x74,0xd1,0x45,0x17,0xed,0x3f]}

tool: {"D85": [0x2f,0xba,0xe8,0xa2,0x8b,0x2e,0xea,0x3f]}

tool: D108: 7.5625

tool: {"D76": [0x00,0x00,0x00,0x00,0x00,0x00,0xee,0x3f]}

tool: {"D94": [0x74,0xd1,0x45,0x17,0x5d,0x74,0xe1,0x3f]}

tool: {"D46": [0x00,0x00,0x00,0x00,0x00,0x00,0xe8,0x3f]}

tool: {"D15": [0x8c,0x2e,0xba,0xe8,0xa2,0x8b,0xee,0x3f]}

tool: {"D10": [0x00,0x00,0x00,0x00,0x00,0x80,0xef,0x3f]}

assistant: ```c
float ANTweenTimingFunctionBounceOut(float time, float begin, float change, float duration) {
  time /= duration;
  if (time < (1 / 2.75)) {
    return change * (7.5625 * time * time) + begin;
  } else if (time < (2 / 2.75)) {
    time -= (1.5 / 2.75);
    return change * (7.5625 * time * time + .75) + begin;
  } else if (time < (2.5 / 2.75)) {
    time -= (2.25 / 2.75);
    return change * (7.5625 * time * time + .9375) + begin;
  } else {
    time -= (2.625 / 2.75);
    return change * (7.5625 * time * time + .984375) + begin;
  }
}
```