#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 */
typedef int /*<<< orphan*/ excess;

/* Variables and functions */
int interpolate_symmetric_linear(int, double *, double);
double prutenic_excess_sol(double angle) {
  double excess[] = {
      ((0) + (0) / 60.),   ((0) + (32) / 60.),  ((1) + (4) / 60.),
      ((1) + (36) / 60.),  ((2) + (7) / 60.),   ((2) + (39) / 60.),
      ((3) + (11) / 60.),  ((3) + (42) / 60.),  ((4) + (14) / 60.),
      ((4) + (46) / 60.),  ((5) + (17) / 60.),  ((5) + (48) / 60.),
      ((6) + (20) / 60.),  ((6) + (51) / 60.),  ((7) + (22) / 60.),
      ((7) + (53) / 60.),  ((8) + (24) / 60.),  ((8) + (55) / 60.),
      ((9) + (26) / 60.),  ((9) + (56) / 60.),  ((10) + (26) / 60.),
      ((10) + (57) / 60.), ((11) + (27) / 60.), ((11) + (57) / 60.),
      ((12) + (26) / 60.), ((12) + (56) / 60.), ((13) + (25) / 60.),
      ((13) + (54) / 60.), ((14) + (23) / 60.), ((14) + (52) / 60.),
      ((15) + (20) / 60.), ((15) + (49) / 60.), ((16) + (17) / 60.),
      ((16) + (45) / 60.), ((17) + (12) / 60.), ((17) + (39) / 60.),
      ((18) + (6) / 60.),  ((18) + (33) / 60.), ((19) + (0) / 60.),
      ((19) + (26) / 60.), ((19) + (52) / 60.), ((20) + (17) / 60.),
      ((20) + (42) / 60.), ((21) + (7) / 60.),  ((21) + (32) / 60.),
      ((21) + (56) / 60.), ((22) + (20) / 60.), ((22) + (44) / 60.),
      ((23) + (7) / 60.),  ((23) + (30) / 60.), ((23) + (52) / 60.),
      ((24) + (15) / 60.), ((24) + (36) / 60.), ((24) + (58) / 60.),
      ((25) + (19) / 60.), ((25) + (39) / 60.), ((25) + (59) / 60.),
      ((26) + (19) / 60.), ((26) + (39) / 60.), ((26) + (57) / 60.),
      ((27) + (16) / 60.), ((27) + (34) / 60.), ((27) + (52) / 60.),
      ((28) + (9) / 60.),  ((28) + (25) / 60.), ((28) + (41) / 60.),
      ((28) + (57) / 60.), ((29) + (12) / 60.), ((29) + (27) / 60.),
      ((29) + (41) / 60.), ((29) + (55) / 60.), ((30) + (8) / 60.),
      ((30) + (21) / 60.), ((30) + (33) / 60.), ((30) + (45) / 60.),
      ((30) + (56) / 60.), ((31) + (7) / 60.),  ((31) + (17) / 60.),
      ((31) + (27) / 60.), ((31) + (36) / 60.), ((31) + (44) / 60.),
      ((31) + (52) / 60.), ((32) + (0) / 60.),  ((32) + (7) / 60.),
      ((32) + (13) / 60.), ((32) + (19) / 60.), ((32) + (24) / 60.),
      ((32) + (28) / 60.), ((32) + (32) / 60.), ((32) + (36) / 60.),
      ((32) + (39) / 60.), ((32) + (41) / 60.), ((32) + (43) / 60.),
      ((32) + (44) / 60.), ((32) + (44) / 60.), ((32) + (44) / 60.),
      ((32) + (43) / 60.), ((32) + (42) / 60.), ((32) + (40) / 60.),
      ((32) + (37) / 60.), ((32) + (34) / 60.), ((32) + (30) / 60.),
      ((32) + (26) / 60.), ((32) + (21) / 60.), ((32) + (15) / 60.),
      ((32) + (9) / 60.),  ((32) + (2) / 60.),  ((31) + (54) / 60.),
      ((31) + (46) / 60.), ((31) + (38) / 60.), ((31) + (28) / 60.),
      ((31) + (18) / 60.), ((31) + (8) / 60.),  ((30) + (56) / 60.),
      ((30) + (45) / 60.), ((30) + (32) / 60.), ((30) + (19) / 60.),
      ((30) + (6) / 60.),  ((29) + (51) / 60.), ((29) + (37) / 60.),
      ((29) + (21) / 60.), ((29) + (5) / 60.),  ((28) + (49) / 60.),
      ((28) + (31) / 60.), ((28) + (14) / 60.), ((27) + (55) / 60.),
      ((27) + (36) / 60.), ((27) + (17) / 60.), ((26) + (57) / 60.),
      ((26) + (36) / 60.), ((26) + (15) / 60.), ((25) + (53) / 60.),
      ((25) + (31) / 60.), ((25) + (8) / 60.),  ((24) + (45) / 60.),
      ((24) + (21) / 60.), ((23) + (57) / 60.), ((23) + (32) / 60.),
      ((23) + (7) / 60.),  ((22) + (41) / 60.), ((22) + (14) / 60.),
      ((21) + (48) / 60.), ((21) + (20) / 60.), ((20) + (53) / 60.),
      ((20) + (24) / 60.), ((19) + (56) / 60.), ((19) + (27) / 60.),
      ((18) + (57) / 60.), ((18) + (27) / 60.), ((17) + (57) / 60.),
      ((17) + (26) / 60.), ((16) + (55) / 60.), ((16) + (24) / 60.),
      ((15) + (52) / 60.), ((15) + (20) / 60.), ((14) + (47) / 60.),
      ((14) + (14) / 60.), ((13) + (41) / 60.), ((13) + (8) / 60.),
      ((12) + (34) / 60.), ((12) + (0) / 60.),  ((11) + (26) / 60.),
      ((10) + (51) / 60.), ((10) + (16) / 60.), ((9) + (41) / 60.),
      ((9) + (6) / 60.),   ((8) + (30) / 60.),  ((7) + (55) / 60.),
      ((7) + (19) / 60.),  ((6) + (43) / 60.),  ((6) + (7) / 60.),
      ((5) + (30) / 60.),  ((4) + (54) / 60.),  ((4) + (18) / 60.),
      ((3) + (41) / 60.),  ((3) + (4) / 60.),   ((2) + (28) / 60.),
      ((1) + (51) / 60.),  ((1) + (14) / 60.),  ((0) + (37) / 60.),
      ((0) + (0) / 60.),
  };
  return interpolate_symmetric_linear(sizeof(excess) / sizeof(*excess), excess,
                                      angle) /
         60.;
}


x86 assembly (clang, -O0):
<prutenic_excess_sol>:
push   %rbp
mov    %rsp,%rbp
sub    $0x5b0,%rsp
movsd  %xmm0,-0x8(%rbp)
lea    -0x5b0(%rbp),%rdi
lea    0xed2(%rip),%rsi
mov    $0x5a8,%edx
call   1040 <memcpy@plt>
lea    -0x5b0(%rbp),%rsi
movsd  -0x8(%rbp),%xmm0
mov    $0xb5,%edi
call   1030 <interpolate_symmetric_linear@plt>
cvtsi2sd %eax,%xmm0
movsd  0xe96(%rip),%xmm1
divsd  %xmm1,%xmm0
add    $0x5b0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<prutenic_excess_sol>:
push   %rbx
sub    $0x5c0,%rsp
movsd  %xmm0,0x8(%rsp)
lea    0xedb(%rip),%rsi
lea    0x10(%rsp),%rbx
mov    $0x5a8,%edx
mov    %rbx,%rdi
call   1040 <memcpy@plt>
mov    $0xb5,%edi
mov    %rbx,%rsi
movsd  0x8(%rsp),%xmm0
call   1030 <interpolate_symmetric_linear@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
divsd  0xe97(%rip),%xmm0
add    $0x5c0,%rsp
pop    %rbx
ret

LLVM IR (-O0):
@__const.prutenic_excess_sol.excess = [181 x double] [double 0.000000e+00, double 0x3FE1111111111111, double 0x3FF1111111111111, double 1.600000e+00, double 0x4000EEEEEEEEEEEF, double 2.650000e+00, double 0x4009777777777777, double 3.700000e+00, double 0x4010EEEEEEEEEEEF, double 0x4013111111111111, double 0x4015222222222222, double 5.800000e+00, double 0x4019555555555555, double 6.850000e+00, double 0x401D777777777777, double 0x401F888888888888, double 8.400000e+00, double 0x4021D55555555555, double 0x4022DDDDDDDDDDDE, double 0x4023DDDDDDDDDDDE, double 0x4024DDDDDDDDDDDE, double 1.095000e+01, double 1.145000e+01, double 1.195000e+01, double 0x4028DDDDDDDDDDDE, double 0x4029DDDDDDDDDDDE, double 0x402AD55555555555, double 1.390000e+01, double 0x402CC44444444444, double 0x402DBBBBBBBBBBBC, double 0x402EAAAAAAAAAAAB, double 0x402FA22222222222, double 0x4030488888888889, double 1.675000e+01, double 1.720000e+01, double 1.765000e+01, double 1.810000e+01, double 1.855000e+01, double 1.900000e+01, double 0x40336EEEEEEEEEEF, double 0x4033DDDDDDDDDDDE, double 0x4034488888888889, double 2.070000e+01, double 0x40351DDDDDDDDDDE, double 0x4035888888888889, double 0x4035EEEEEEEEEEEF, double 0x4036555555555555, double 0x4036BBBBBBBBBBBC, double 0x40371DDDDDDDDDDE, double 2.350000e+01, double 0x4037DDDDDDDDDDDE, double 2.425000e+01, double 2.460000e+01, double 0x4038F77777777777, double 0x4039511111111111, double 2.565000e+01, double 0x4039FBBBBBBBBBBC, double 0x403A511111111111, double 2.665000e+01, double 2.695000e+01, double 0x403B444444444444, double 0x403B911111111111, double 0x403BDDDDDDDDDDDE, double 2.815000e+01, double 0x403C6AAAAAAAAAAB, double 0x403CAEEEEEEEEEEF, double 2.895000e+01, double 2.920000e+01, double 2.945000e+01, double 0x403DAEEEEEEEEEEF, double 0x403DEAAAAAAAAAAB, double 0x403E222222222222, double 3.035000e+01, double 3.055000e+01, double 3.075000e+01, double 0x403EEEEEEEEEEEEF, double 0x403F1DDDDDDDDDDE, double 0x403F488888888889, double 3.145000e+01, double 3.160000e+01, double 0x403FBBBBBBBBBBBC, double 0x403FDDDDDDDDDDDE, double 3.200000e+01, double 0x40400EEEEEEEEEEF, double 0x40401BBBBBBBBBBC, double 0x4040288888888889, double 3.240000e+01, double 0x40403BBBBBBBBBBC, double 0x4040444444444444, double 3.260000e+01, double 3.265000e+01, double 0x4040577777777777, double 0x40405BBBBBBBBBBC, double 0x40405DDDDDDDDDDE, double 0x40405DDDDDDDDDDE, double 0x40405DDDDDDDDDDE, double 0x40405BBBBBBBBBBC, double 3.270000e+01, double 0x4040555555555555, double 0x40404EEEEEEEEEEF, double 0x4040488888888889, double 3.250000e+01, double 0x4040377777777777, double 3.235000e+01, double 3.225000e+01, double 3.215000e+01, double 0x4040044444444444, double 3.190000e+01, double 0x403FC44444444444, double 0x403FA22222222222, double 0x403F777777777777, double 3.130000e+01, double 0x403F222222222222, double 0x403EEEEEEEEEEEEF, double 3.075000e+01, double 0x403E888888888889, double 0x403E511111111111, double 3.010000e+01, double 2.985000e+01, double 0x403D9DDDDDDDDDDE, double 2.935000e+01, double 0x403D155555555555, double 0x403CD11111111111, double 0x403C844444444444, double 0x403C3BBBBBBBBBBC, double 0x403BEAAAAAAAAAAB, double 2.760000e+01, double 0x403B488888888889, double 2.695000e+01, double 2.660000e+01, double 2.625000e+01, double 0x4039E22222222222, double 0x4039844444444444, double 0x4039222222222222, double 2.475000e+01, double 2.435000e+01, double 2.395000e+01, double 0x4037888888888889, double 0x40371DDDDDDDDDDE, double 0x4036AEEEEEEEEEEF, double 0x40363BBBBBBBBBBC, double 2.180000e+01, double 0x4035555555555555, double 0x4034E22222222222, double 2.040000e+01, double 0x4033EEEEEEEEEEEF, double 1.945000e+01, double 1.895000e+01, double 1.845000e+01, double 1.795000e+01, double 0x40316EEEEEEEEEEF, double 0x4030EAAAAAAAAAAB, double 1.640000e+01, double 0x402FBBBBBBBBBBBC, double 0x402EAAAAAAAAAAAB, double 0x402D911111111111, double 0x402C777777777777, double 0x402B5DDDDDDDDDDE, double 0x402A444444444444, double 0x4029222222222222, double 1.200000e+01, double 0x4026DDDDDDDDDDDE, double 1.085000e+01, double 0x4024888888888889, double 0x40235DDDDDDDDDDE, double 9.100000e+00, double 8.500000e+00, double 0x401FAAAAAAAAAAAB, double 0x401D444444444444, double 0x401ADDDDDDDDDDDE, double 0x4018777777777777, double 5.500000e+00, double 4.900000e+00, double 4.300000e+00, double 0x400D777777777778, double 0x4008888888888889, double 0x4003BBBBBBBBBBBC, double 1.850000e+00, double 0x3FF3BBBBBBBBBBBC, double 0x3FE3BBBBBBBBBBBC, double 0.000000e+00]
define double @prutenic_excess_sol(double %0) {
%2 = alloca double
%3 = alloca [181 x double]
store double %0, double* %2
%4 = bitcast [181 x double]* %3 to i8*
%5 = getelementptr inbounds [181 x double], [181 x double]* %3, i64 0, i64 0
%6 = load double, double* %2
%7 = call i32 @interpolate_symmetric_linear(i32 181, double* %5, double %6)
%8 = sitofp i32 %7 to double
%9 = fdiv double %8, 6.000000e+01
ret double %9
}

LLVM IR (-O2):
@__const.prutenic_excess_sol.excess = [181 x double] [double 0.000000e+00, double 0x3FE1111111111111, double 0x3FF1111111111111, double 1.600000e+00, double 0x4000EEEEEEEEEEEF, double 2.650000e+00, double 0x4009777777777777, double 3.700000e+00, double 0x4010EEEEEEEEEEEF, double 0x4013111111111111, double 0x4015222222222222, double 5.800000e+00, double 0x4019555555555555, double 6.850000e+00, double 0x401D777777777777, double 0x401F888888888888, double 8.400000e+00, double 0x4021D55555555555, double 0x4022DDDDDDDDDDDE, double 0x4023DDDDDDDDDDDE, double 0x4024DDDDDDDDDDDE, double 1.095000e+01, double 1.145000e+01, double 1.195000e+01, double 0x4028DDDDDDDDDDDE, double 0x4029DDDDDDDDDDDE, double 0x402AD55555555555, double 1.390000e+01, double 0x402CC44444444444, double 0x402DBBBBBBBBBBBC, double 0x402EAAAAAAAAAAAB, double 0x402FA22222222222, double 0x4030488888888889, double 1.675000e+01, double 1.720000e+01, double 1.765000e+01, double 1.810000e+01, double 1.855000e+01, double 1.900000e+01, double 0x40336EEEEEEEEEEF, double 0x4033DDDDDDDDDDDE, double 0x4034488888888889, double 2.070000e+01, double 0x40351DDDDDDDDDDE, double 0x4035888888888889, double 0x4035EEEEEEEEEEEF, double 0x4036555555555555, double 0x4036BBBBBBBBBBBC, double 0x40371DDDDDDDDDDE, double 2.350000e+01, double 0x4037DDDDDDDDDDDE, double 2.425000e+01, double 2.460000e+01, double 0x4038F77777777777, double 0x4039511111111111, double 2.565000e+01, double 0x4039FBBBBBBBBBBC, double 0x403A511111111111, double 2.665000e+01, double 2.695000e+01, double 0x403B444444444444, double 0x403B911111111111, double 0x403BDDDDDDDDDDDE, double 2.815000e+01, double 0x403C6AAAAAAAAAAB, double 0x403CAEEEEEEEEEEF, double 2.895000e+01, double 2.920000e+01, double 2.945000e+01, double 0x403DAEEEEEEEEEEF, double 0x403DEAAAAAAAAAAB, double 0x403E222222222222, double 3.035000e+01, double 3.055000e+01, double 3.075000e+01, double 0x403EEEEEEEEEEEEF, double 0x403F1DDDDDDDDDDE, double 0x403F488888888889, double 3.145000e+01, double 3.160000e+01, double 0x403FBBBBBBBBBBBC, double 0x403FDDDDDDDDDDDE, double 3.200000e+01, double 0x40400EEEEEEEEEEF, double 0x40401BBBBBBBBBBC, double 0x4040288888888889, double 3.240000e+01, double 0x40403BBBBBBBBBBC, double 0x4040444444444444, double 3.260000e+01, double 3.265000e+01, double 0x4040577777777777, double 0x40405BBBBBBBBBBC, double 0x40405DDDDDDDDDDE, double 0x40405DDDDDDDDDDE, double 0x40405DDDDDDDDDDE, double 0x40405BBBBBBBBBBC, double 3.270000e+01, double 0x4040555555555555, double 0x40404EEEEEEEEEEF, double 0x4040488888888889, double 3.250000e+01, double 0x4040377777777777, double 3.235000e+01, double 3.225000e+01, double 3.215000e+01, double 0x4040044444444444, double 3.190000e+01, double 0x403FC44444444444, double 0x403FA22222222222, double 0x403F777777777777, double 3.130000e+01, double 0x403F222222222222, double 0x403EEEEEEEEEEEEF, double 3.075000e+01, double 0x403E888888888889, double 0x403E511111111111, double 3.010000e+01, double 2.985000e+01, double 0x403D9DDDDDDDDDDE, double 2.935000e+01, double 0x403D155555555555, double 0x403CD11111111111, double 0x403C844444444444, double 0x403C3BBBBBBBBBBC, double 0x403BEAAAAAAAAAAB, double 2.760000e+01, double 0x403B488888888889, double 2.695000e+01, double 2.660000e+01, double 2.625000e+01, double 0x4039E22222222222, double 0x4039844444444444, double 0x4039222222222222, double 2.475000e+01, double 2.435000e+01, double 2.395000e+01, double 0x4037888888888889, double 0x40371DDDDDDDDDDE, double 0x4036AEEEEEEEEEEF, double 0x40363BBBBBBBBBBC, double 2.180000e+01, double 0x4035555555555555, double 0x4034E22222222222, double 2.040000e+01, double 0x4033EEEEEEEEEEEF, double 1.945000e+01, double 1.895000e+01, double 1.845000e+01, double 1.795000e+01, double 0x40316EEEEEEEEEEF, double 0x4030EAAAAAAAAAAB, double 1.640000e+01, double 0x402FBBBBBBBBBBBC, double 0x402EAAAAAAAAAAAB, double 0x402D911111111111, double 0x402C777777777777, double 0x402B5DDDDDDDDDDE, double 0x402A444444444444, double 0x4029222222222222, double 1.200000e+01, double 0x4026DDDDDDDDDDDE, double 1.085000e+01, double 0x4024888888888889, double 0x40235DDDDDDDDDDE, double 9.100000e+00, double 8.500000e+00, double 0x401FAAAAAAAAAAAB, double 0x401D444444444444, double 0x401ADDDDDDDDDDDE, double 0x4018777777777777, double 5.500000e+00, double 4.900000e+00, double 4.300000e+00, double 0x400D777777777778, double 0x4008888888888889, double 0x4003BBBBBBBBBBBC, double 1.850000e+00, double 0x3FF3BBBBBBBBBBBC, double 0x3FE3BBBBBBBBBBBC, double 0.000000e+00]
define double @prutenic_excess_sol(double %0) {
%2 = alloca [181 x double]
%3 = bitcast [181 x double]* %2 to i8*
%4 = getelementptr inbounds [181 x double], [181 x double]* %2, i64 0, i64 0
%5 = call i32 @interpolate_symmetric_linear(i32 181, double* %4, double %0)
%6 = sitofp i32 %5 to double
%7 = fdiv double %6, 6.000000e+01
ret double %7
}