int checkbound(long double ZZ[16], long double max) {
  int b;
  for (b = 0; b < 16; b++)
    if (((ZZ[b]) > (1 / ZZ[b]) ? (ZZ[b]) : (1 / ZZ[b])) > max * (1 + 1e-10))
      return 0;
  return 1;
}


x86 assembly (clang, -O0):
<checkbound>:
push   %rbp
mov    %rsp,%rbp
fldt   0x10(%rbp)
mov    %rdi,-0x10(%rbp)
fstpt  -0x20(%rbp)
movl   $0x0,-0x24(%rbp)
cmpl   $0x10,-0x24(%rbp)
jge    11ae <checkbound+0xae>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
shl    $0x4,%rcx
fldt   (%rax,%rcx,1)
fld1
fdiv   %st(1),%st
fxch   %st(1)
fucomip %st(1),%st
fstp   %st(0)
jbe    115a <checkbound+0x5a>
jmp    1143 <checkbound+0x43>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
shl    $0x4,%rcx
fldt   (%rax,%rcx,1)
fstpt  -0x30(%rbp)
jmp    1170 <checkbound+0x70>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
shl    $0x4,%rcx
fldt   (%rax,%rcx,1)
fld1
fdivp  %st,%st(1)
fstpt  -0x30(%rbp)
fldt   -0x30(%rbp)
fldt   -0x20(%rbp)
fldl   0xe84(%rip)
fmulp  %st,%st(1)
fxch   %st(1)
fucomip %st(1),%st
fstp   %st(0)
jbe    119b <checkbound+0x9b>
jmp    118f <checkbound+0x8f>
movl   $0x0,-0x4(%rbp)
jmp    11b5 <checkbound+0xb5>
jmp    11a0 <checkbound+0xa0>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1115 <checkbound+0x15>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<checkbound>:
fldt   0x8(%rsp)
fmull  0xef6(%rip)
xor    %eax,%eax
fld1
xor    %ecx,%ecx
fldt   (%rdi,%rcx,1)
fld    %st(1)
fdiv   %st(1),%st
fxch   %st(1)
fucomi %st(1),%st
fxch   %st(1)
fcmovnbe %st(1),%st
fstp   %st(1)
fucomip %st(2),%st
ja     1152 <checkbound+0x52>
fldt   0x10(%rdi,%rcx,1)
fld    %st(1)
fdiv   %st(1),%st
fxch   %st(1)
fucomi %st(1),%st
fxch   %st(1)
fcmovnbe %st(1),%st
fstp   %st(1)
fucomip %st(2),%st
ja     1152 <checkbound+0x52>
add    $0x20,%rcx
cmp    $0x100,%rcx
jne    1110 <checkbound+0x10>
fstp   %st(1)
fstp   %st(0)
mov    $0x1,%eax
ret
fstp   %st(1)
fstp   %st(0)
ret

LLVM IR (-O0):
define i32 @checkbound(x86_fp80* %0, x86_fp80 %1) {
%3 = alloca i32
%4 = alloca x86_fp80*
%5 = alloca x86_fp80
%6 = alloca i32
store x86_fp80* %0, x86_fp80** %4
store x86_fp80 %1, x86_fp80* %5
store i32 0, i32* %6
br label %7
7: ; preds = %43, %2
%8 = load i32, i32* %6
%9 = icmp slt i32 %8, 16
br i1 %9, label %10, label %46
10: ; preds = %7
%11 = load x86_fp80*, x86_fp80** %4
%12 = load i32, i32* %6
%13 = sext i32 %12 to i64
%14 = getelementptr inbounds x86_fp80, x86_fp80* %11, i64 %13
%15 = load x86_fp80, x86_fp80* %14
%16 = load x86_fp80*, x86_fp80** %4
%17 = load i32, i32* %6
%18 = sext i32 %17 to i64
%19 = getelementptr inbounds x86_fp80, x86_fp80* %16, i64 %18
%20 = load x86_fp80, x86_fp80* %19
%21 = fdiv x86_fp80 0xK3FFF8000000000000000, %20
%22 = fcmp ogt x86_fp80 %15, %21
br i1 %22, label %23, label %29
23: ; preds = %10
%24 = load x86_fp80*, x86_fp80** %4
%25 = load i32, i32* %6
%26 = sext i32 %25 to i64
%27 = getelementptr inbounds x86_fp80, x86_fp80* %24, i64 %26
%28 = load x86_fp80, x86_fp80* %27
br label %36
29: ; preds = %10
%30 = load x86_fp80*, x86_fp80** %4
%31 = load i32, i32* %6
%32 = sext i32 %31 to i64
%33 = getelementptr inbounds x86_fp80, x86_fp80* %30, i64 %32
%34 = load x86_fp80, x86_fp80* %33
%35 = fdiv x86_fp80 0xK3FFF8000000000000000, %34
br label %36
36: ; preds = %29, %23
%37 = phi x86_fp80 [ %28, %23 ], [ %35, %29 ]
%38 = load x86_fp80, x86_fp80* %5
%39 = fmul x86_fp80 %38, 0xK3FFF8000000036F9C000
%40 = fcmp ogt x86_fp80 %37, %39
br i1 %40, label %41, label %42
41: ; preds = %36
store i32 0, i32* %3
br label %47
42: ; preds = %36
br label %43
43: ; preds = %42
%44 = load i32, i32* %6
%45 = add nsw i32 %44, 1
store i32 %45, i32* %6
br label %7
46: ; preds = %7
store i32 1, i32* %3
br label %47
47: ; preds = %46, %41
%48 = load i32, i32* %3
ret i32 %48
}

LLVM IR (-O2):
define i32 @checkbound(x86_fp80* nocapture %0, x86_fp80 %1) {
%3 = fmul x86_fp80 %1, 0xK3FFF8000000036F9C000
br label %15
4: ; preds = %15
%5 = or i64 %16, 1
%6 = getelementptr inbounds x86_fp80, x86_fp80* %0, i64 %5
%7 = load x86_fp80, x86_fp80* %6
%8 = fdiv x86_fp80 0xK3FFF8000000000000000, %7
%9 = fcmp ogt x86_fp80 %7, %8
%10 = select i1 %9, x86_fp80 %7, x86_fp80 %8
%11 = fcmp ogt x86_fp80 %10, %3
br i1 %11, label %23, label %12
12: ; preds = %4
%13 = add nuw nsw i64 %16, 2
%14 = icmp eq i64 %13, 16
br i1 %14, label %23, label %15
15: ; preds = %12, %2
%16 = phi i64 [ 0, %2 ], [ %13, %12 ]
%17 = getelementptr inbounds x86_fp80, x86_fp80* %0, i64 %16
%18 = load x86_fp80, x86_fp80* %17
%19 = fdiv x86_fp80 0xK3FFF8000000000000000, %18
%20 = fcmp ogt x86_fp80 %18, %19
%21 = select i1 %20, x86_fp80 %18, x86_fp80 %19
%22 = fcmp ogt x86_fp80 %21, %3
br i1 %22, label %23, label %4
23: ; preds = %12, %4, %15
%24 = phi i32 [ 0, %15 ], [ 0, %4 ], [ 1, %12 ]
ret i32 %24
}