double Tween_BounceOutEasing(double k) {
  if (k < (1 / 2.75)) {
    return 7.5625 * k * k;
  } else if (k < (2 / 2.75)) {
    k -= (1.5 / 2.75);
    return 7.5625 * k * k + 0.75;
  } else if (k < (2.5 / 2.75)) {
    k -= (2.25 / 2.75);
    return 7.5625 * k * k + 0.9375;
  }
  k -= (2.625 / 2.75);
  return 7.5625 * k * k + 0.984375;
}


x86 assembly (clang, -O0):
<Tween_BounceOutEasing>:
push   %rbp
mov    %rsp,%rbp
movsd  %xmm0,-0x10(%rbp)
movsd  0xeef(%rip),%xmm0
ucomisd -0x10(%rbp),%xmm0
jbe    1138 <Tween_BounceOutEasing+0x38>
movsd  0xefc(%rip),%xmm0
mulsd  -0x10(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1229 <Tween_BounceOutEasing+0x129>
movsd  0xec8(%rip),%xmm0
ucomisd -0x10(%rbp),%xmm0
jbe    118d <Tween_BounceOutEasing+0x8d>
movsd  -0x10(%rbp),%xmm0
movsd  0xef0(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xeb7(%rip),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xec1(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1229 <Tween_BounceOutEasing+0x129>
movsd  0xe7b(%rip),%xmm0
ucomisd -0x10(%rbp),%xmm0
jbe    11e2 <Tween_BounceOutEasing+0xe2>
movsd  -0x10(%rbp),%xmm0
movsd  0xe8b(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xe62(%rip),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xe5c(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1229 <Tween_BounceOutEasing+0x129>
jmp    11e7 <Tween_BounceOutEasing+0xe7>
jmp    11ec <Tween_BounceOutEasing+0xec>
movsd  -0x10(%rbp),%xmm0
movsd  0xe2f(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xe16(%rip),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xdf8(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<Tween_BounceOutEasing>:
movsd  0xef8(%rip),%xmm1
ucomisd %xmm0,%xmm1
jbe    1123 <Tween_BounceOutEasing+0x23>
movsd  0xf0a(%rip),%xmm1
mulsd  %xmm0,%xmm1
mulsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
ret
movsd  0xedd(%rip),%xmm1
ucomisd %xmm0,%xmm1
jbe    1156 <Tween_BounceOutEasing+0x56>
addsd  0xf07(%rip),%xmm0
movsd  0xedf(%rip),%xmm1
mulsd  %xmm0,%xmm1
mulsd  %xmm0,%xmm1
addsd  0xef7(%rip),%xmm1
movapd %xmm1,%xmm0
ret
movsd  0xeb2(%rip),%xmm1
ucomisd %xmm0,%xmm1
jbe    1189 <Tween_BounceOutEasing+0x89>
addsd  0xec4(%rip),%xmm0
movsd  0xeac(%rip),%xmm1
mulsd  %xmm0,%xmm1
mulsd  %xmm0,%xmm1
addsd  0xeb4(%rip),%xmm1
movapd %xmm1,%xmm0
ret
addsd  0xe87(%rip),%xmm0
movsd  0xe87(%rip),%xmm1
mulsd  %xmm0,%xmm1
mulsd  %xmm0,%xmm1
addsd  0xe7f(%rip),%xmm1
movapd %xmm1,%xmm0
ret

LLVM IR (-O0):
define double @Tween_BounceOutEasing(double %0) {
%2 = alloca double
%3 = alloca double
store double %0, double* %3
%4 = load double, double* %3
%5 = fcmp olt double %4, 0x3FD745D1745D1746
br i1 %5, label %6, label %11
6: ; preds = %1
%7 = load double, double* %3
%8 = fmul double 7.562500e+00, %7
%9 = load double, double* %3
%10 = fmul double %8, %9
store double %10, double* %2
br label %40
11: ; preds = %1
%12 = load double, double* %3
%13 = fcmp olt double %12, 0x3FE745D1745D1746
br i1 %13, label %14, label %21
14: ; preds = %11
%15 = load double, double* %3
%16 = fsub double %15, 0x3FE1745D1745D174
store double %16, double* %3
%17 = load double, double* %3
%18 = fmul double 7.562500e+00, %17
%19 = load double, double* %3
%20 = call double @llvm.fmuladd.f64(double %18, double %19, double 7.500000e-01)
store double %20, double* %2
br label %40
21: ; preds = %11
%22 = load double, double* %3
%23 = fcmp olt double %22, 0x3FED1745D1745D17
br i1 %23, label %24, label %31
24: ; preds = %21
%25 = load double, double* %3
%26 = fsub double %25, 0x3FEA2E8BA2E8BA2F
store double %26, double* %3
%27 = load double, double* %3
%28 = fmul double 7.562500e+00, %27
%29 = load double, double* %3
%30 = call double @llvm.fmuladd.f64(double %28, double %29, double 9.375000e-01)
store double %30, double* %2
br label %40
31: ; preds = %21
br label %32
32: ; preds = %31
br label %33
33: ; preds = %32
%34 = load double, double* %3
%35 = fsub double %34, 0x3FEE8BA2E8BA2E8C
store double %35, double* %3
%36 = load double, double* %3
%37 = fmul double 7.562500e+00, %36
%38 = load double, double* %3
%39 = call double @llvm.fmuladd.f64(double %37, double %38, double 9.843750e-01)
store double %39, double* %2
br label %40
40: ; preds = %33, %24, %14, %6
%41 = load double, double* %2
ret double %41
}

LLVM IR (-O2):
define double @Tween_BounceOutEasing(double %0) {
%2 = fcmp olt double %0, 0x3FD745D1745D1746
br i1 %2, label %3, label %6
3: ; preds = %1
%4 = fmul double %0, 7.562500e+00
%5 = fmul double %4, %0
br label %22
6: ; preds = %1
%7 = fcmp olt double %0, 0x3FE745D1745D1746
br i1 %7, label %8, label %12
8: ; preds = %6
%9 = fadd double %0, 0xBFE1745D1745D174
%10 = fmul double %9, 7.562500e+00
%11 = tail call double @llvm.fmuladd.f64(double %10, double %9, double 7.500000e-01)
br label %22
12: ; preds = %6
%13 = fcmp olt double %0, 0x3FED1745D1745D17
br i1 %13, label %14, label %18
14: ; preds = %12
%15 = fadd double %0, 0xBFEA2E8BA2E8BA2F
%16 = fmul double %15, 7.562500e+00
%17 = tail call double @llvm.fmuladd.f64(double %16, double %15, double 9.375000e-01)
br label %22
18: ; preds = %12
%19 = fadd double %0, 0xBFEE8BA2E8BA2E8C
%20 = fmul double %19, 7.562500e+00
%21 = tail call double @llvm.fmuladd.f64(double %20, double %19, double 9.843750e-01)
br label %22
22: ; preds = %18, %14, %8, %3
%23 = phi double [ %5, %3 ], [ %11, %8 ], [ %17, %14 ], [ %21, %18 ]
ret double %23
}