#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
double M_PI;
double asin(double);
int /*<<< orphan*/ printf(char *, double, double, double);
double sin(double);
main() {
  double alt, b, asshole;
  for (alt = 0.0; alt <= 90.1; alt += 1) {
    asshole = sin((alt + 90.0) / (180.0 / M_PI));
    b = ((180.0 / M_PI) * asin(0.75 * sin(alt + 90.0 / (180.0 / M_PI))));
    printf("%13.6e %13.6e %13.6e\n", alt, asshole, b);
  }
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
movl   $0x0,-0x4(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xeb1(%rip),%xmm0
ucomisd -0x10(%rbp),%xmm0
jb     1224 <main+0xf4>
movsd  0xeae(%rip),%xmm0
addsd  -0x10(%rbp),%xmm0
movsd  0xea9(%rip),%xmm1
mov    0x2e72(%rip),%rax
divsd  (%rax),%xmm1
divsd  %xmm1,%xmm0
call   1040 <sin@plt>
movsd  %xmm0,-0x20(%rbp)
movsd  0xe88(%rip),%xmm0
mov    0x2e51(%rip),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  0xe6b(%rip),%xmm2
mov    0x2e34(%rip),%rax
divsd  (%rax),%xmm2
movsd  0xe50(%rip),%xmm1
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
call   1040 <sin@plt>
movaps %xmm0,%xmm1
movsd  0xe30(%rip),%xmm0
mulsd  %xmm1,%xmm0
call   1050 <asin@plt>
movaps %xmm0,%xmm1
movsd  -0x28(%rbp),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm1
movsd  -0x18(%rbp),%xmm2
lea    0xe20(%rip),%rdi
call   1030 <printf@plt>
movsd  0xe0b(%rip),%xmm0
addsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x10(%rbp)
jmp    1147 <main+0x17>
mov    -0x4(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r14
push   %rbx
sub    $0x18,%rsp
xorpd  %xmm0,%xmm0
mov    0x2ea6(%rip),%rbx
lea    0xedf(%rip),%r14
nopl   0x0(%rax)
movsd  %xmm0,(%rsp)
movsd  (%rsp),%xmm0
movsd  0xe9e(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  0xe9a(%rip),%xmm1
divsd  (%rbx),%xmm1
divsd  %xmm1,%xmm0
call   1040 <sin@plt>
movsd  %xmm0,0x10(%rsp)
movsd  0xe7f(%rip),%xmm1
divsd  (%rbx),%xmm1
movsd  %xmm1,0x8(%rsp)
movsd  0xe65(%rip),%xmm0
divsd  %xmm1,%xmm0
addsd  (%rsp),%xmm0
call   1040 <sin@plt>
mulsd  0xe5f(%rip),%xmm0
call   1050 <asin@plt>
movsd  0x8(%rsp),%xmm2
mulsd  %xmm0,%xmm2
mov    %r14,%rdi
movsd  (%rsp),%xmm0
movsd  0x10(%rsp),%xmm1
call   1030 <printf@plt>
movsd  (%rsp),%xmm0
addsd  0xe38(%rip),%xmm0
movsd  0xe38(%rip),%xmm1
ucomisd %xmm0,%xmm1
jae    1150 <main+0x20>
xor    %eax,%eax
add    $0x18,%rsp
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
@M_PI = global double 0.000000e+00
@.str = [22 x i8] c"%13.6e %13.6e %13.6e\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca double
%3 = alloca double
%4 = alloca double
store i32 0, i32* %1
store double 0.000000e+00, double* %2
br label %5
5: ; preds = %30, %0
%6 = load double, double* %2
%7 = fcmp ole double %6, 9.010000e+01
br i1 %7, label %8, label %33
8: ; preds = %5
%9 = load double, double* %2
%10 = fadd double %9, 9.000000e+01
%11 = load double, double* @M_PI
%12 = fdiv double 1.800000e+02, %11
%13 = fdiv double %10, %12
%14 = call double @sin(double %13)
store double %14, double* %4
%15 = load double, double* @M_PI
%16 = fdiv double 1.800000e+02, %15
%17 = load double, double* %2
%18 = load double, double* @M_PI
%19 = fdiv double 1.800000e+02, %18
%20 = fdiv double 9.000000e+01, %19
%21 = fadd double %17, %20
%22 = call double @sin(double %21)
%23 = fmul double 7.500000e-01, %22
%24 = call double @asin(double %23)
%25 = fmul double %16, %24
store double %25, double* %3
%26 = load double, double* %2
%27 = load double, double* %4
%28 = load double, double* %3
%29 = call i32 @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str, i64 0, i64 0), double %26, double %27, double %28)
br label %30
30: ; preds = %8
%31 = load double, double* %2
%32 = fadd double %31, 1.000000e+00
store double %32, double* %2
br label %5
33: ; preds = %5
%34 = load i32, i32* %1
ret i32 %34
}

LLVM IR (-O2):
@M_PI = global double 0.000000e+00
@.str = [22 x i8] c"%13.6e %13.6e %13.6e\0A\00"
define i32 @main() {
br label %1
1: ; preds = %0, %1
%2 = phi double [ 0.000000e+00, %0 ], [ %17, %1 ]
%3 = fadd double %2, 9.000000e+01
%4 = load double, double* @M_PI
%5 = fdiv double 1.800000e+02, %4
%6 = fdiv double %3, %5
%7 = tail call double @sin(double %6)
%8 = load double, double* @M_PI
%9 = fdiv double 1.800000e+02, %8
%10 = fdiv double 9.000000e+01, %9
%11 = fadd double %2, %10
%12 = tail call double @sin(double %11)
%13 = fmul double %12, 7.500000e-01
%14 = tail call double @asin(double %13)
%15 = fmul double %9, %14
%16 = tail call i32 @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str, i64 0, i64 0), double %2, double %7, double %15)
%17 = fadd double %2, 1.000000e+00
%18 = fcmp ugt double %17, 9.010000e+01
br i1 %18, label %19, label %1
19: ; preds = %1
ret i32 0
}