double get_value(long TP, long TN, long P, long N) {
  double accuracy, recall, precision, F_measure, balanced;
  long FP, FN;
  accuracy = (TP + TN) / ((double)N + (double)P);
  balanced = (TP / (double)P + TN / (double)N) / 2;
  FN = P - TP;
  FP = N - TN;
  recall = TN / (double)N;
  if (TN + FN > 0) {
    precision = TN / ((double)TN + (double)FN);
    if (precision + recall > 0)
      F_measure = 2 * precision * recall / (precision + recall);
    else
      F_measure = 0;
  } else
    F_measure = 0;
  return balanced;
}


x86 assembly (clang, -O0):
<get_value>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    -0x8(%rbp),%rax
add    -0x10(%rbp),%rax
cvtsi2sd %rax,%xmm0
cvtsi2sdq -0x20(%rbp),%xmm1
cvtsi2sdq -0x18(%rbp),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
cvtsi2sdq -0x8(%rbp),%xmm0
cvtsi2sdq -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
cvtsi2sdq -0x10(%rbp),%xmm1
cvtsi2sdq -0x20(%rbp),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  0xe9a(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x18(%rbp),%rax
sub    -0x8(%rbp),%rax
mov    %rax,-0x58(%rbp)
mov    -0x20(%rbp),%rax
sub    -0x10(%rbp),%rax
mov    %rax,-0x50(%rbp)
cvtsi2sdq -0x10(%rbp),%xmm0
cvtsi2sdq -0x20(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x10(%rbp),%rax
add    -0x58(%rbp),%rax
cmp    $0x0,%rax
jle    121b <get_value+0x11b>
cvtsi2sdq -0x10(%rbp),%xmm0
cvtsi2sdq -0x10(%rbp),%xmm1
cvtsi2sdq -0x58(%rbp),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
addsd  -0x30(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    120e <get_value+0x10e>
movsd  0xe14(%rip),%xmm0
mulsd  -0x38(%rbp),%xmm0
mulsd  -0x30(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm1
addsd  -0x30(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
jmp    1216 <get_value+0x116>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
jmp    1223 <get_value+0x123>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x48(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<get_value>:
cvtsi2sd %rcx,%xmm0
cvtsi2sd %rsi,%xmm1
divsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsi2sd %rdi,%xmm0
cvtsi2sd %rdx,%xmm2
divsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mulsd  0xed5(%rip),%xmm0
ret

LLVM IR (-O0):
define double @get_value(i64 %0, i64 %1, i64 %2, i64 %3) {
%5 = alloca i64
%6 = alloca i64
%7 = alloca i64
%8 = alloca i64
%9 = alloca double
%10 = alloca double
%11 = alloca double
%12 = alloca double
%13 = alloca double
%14 = alloca i64
%15 = alloca i64
store i64 %0, i64* %5
store i64 %1, i64* %6
store i64 %2, i64* %7
store i64 %3, i64* %8
%16 = load i64, i64* %5
%17 = load i64, i64* %6
%18 = add nsw i64 %16, %17
%19 = sitofp i64 %18 to double
%20 = load i64, i64* %8
%21 = sitofp i64 %20 to double
%22 = load i64, i64* %7
%23 = sitofp i64 %22 to double
%24 = fadd double %21, %23
%25 = fdiv double %19, %24
store double %25, double* %9
%26 = load i64, i64* %5
%27 = sitofp i64 %26 to double
%28 = load i64, i64* %7
%29 = sitofp i64 %28 to double
%30 = fdiv double %27, %29
%31 = load i64, i64* %6
%32 = sitofp i64 %31 to double
%33 = load i64, i64* %8
%34 = sitofp i64 %33 to double
%35 = fdiv double %32, %34
%36 = fadd double %30, %35
%37 = fdiv double %36, 2.000000e+00
store double %37, double* %13
%38 = load i64, i64* %7
%39 = load i64, i64* %5
%40 = sub nsw i64 %38, %39
store i64 %40, i64* %15
%41 = load i64, i64* %8
%42 = load i64, i64* %6
%43 = sub nsw i64 %41, %42
store i64 %43, i64* %14
%44 = load i64, i64* %6
%45 = sitofp i64 %44 to double
%46 = load i64, i64* %8
%47 = sitofp i64 %46 to double
%48 = fdiv double %45, %47
store double %48, double* %10
%49 = load i64, i64* %6
%50 = load i64, i64* %15
%51 = add nsw i64 %49, %50
%52 = icmp sgt i64 %51, 0
br i1 %52, label %53, label %77
53: ; preds = %4
%54 = load i64, i64* %6
%55 = sitofp i64 %54 to double
%56 = load i64, i64* %6
%57 = sitofp i64 %56 to double
%58 = load i64, i64* %15
%59 = sitofp i64 %58 to double
%60 = fadd double %57, %59
%61 = fdiv double %55, %60
store double %61, double* %11
%62 = load double, double* %11
%63 = load double, double* %10
%64 = fadd double %62, %63
%65 = fcmp ogt double %64, 0.000000e+00
br i1 %65, label %66, label %75
66: ; preds = %53
%67 = load double, double* %11
%68 = fmul double 2.000000e+00, %67
%69 = load double, double* %10
%70 = fmul double %68, %69
%71 = load double, double* %11
%72 = load double, double* %10
%73 = fadd double %71, %72
%74 = fdiv double %70, %73
store double %74, double* %12
br label %76
75: ; preds = %53
store double 0.000000e+00, double* %12
br label %76
76: ; preds = %75, %66
br label %78
77: ; preds = %4
store double 0.000000e+00, double* %12
br label %78
78: ; preds = %77, %76
%79 = load double, double* %13
ret double %79
}

LLVM IR (-O2):
define double @get_value(i64 %0, i64 %1, i64 %2, i64 %3) {
%5 = sitofp i64 %3 to double
%6 = sitofp i64 %1 to double
%7 = fdiv double %6, %5
%8 = sitofp i64 %0 to double
%9 = sitofp i64 %2 to double
%10 = fdiv double %8, %9
%11 = fadd double %10, %7
%12 = fmul double %11, 5.000000e-01
ret double %12
}