double get_mean_obliquity(double t) {
  double u, u0;
  static double t0 = 30000.;
  static double rval = 0.;
  static const double rvalStart = 23. * 3600. + 26. * 60. + 21.448;
  static const int OBLIQ_COEFFS = 10;
  static const double coeffs[10] = {-468093., -155., 199925., -5138., -24967.,
                                    -3905.,   712.,  2787.,   579.,   245.};
  int i;
  t = (t - 2451545.0) / 36525.;
  if (t0 != t) {
    t0 = t;
    u = u0 = t / 100.;
    rval = rvalStart;
    for (i = 0; i < OBLIQ_COEFFS; i++) {
      rval += u * coeffs[i] / 100.;
      u *= u0;
    }
    rval /= 3600.;
  }
  return rval;
}


x86 assembly (clang, -O0):
<get_mean_obliquity>:
push   %rbp
mov    %rsp,%rbp
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
movsd  0xef2(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0xede(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  0x2eed(%rip),%xmm0
ucomisd -0x8(%rbp),%xmm0
jne    1149 <get_mean_obliquity+0x49>
jp     1149 <get_mean_obliquity+0x49>
jmp    11fc <get_mean_obliquity+0xfc>
movsd  -0x8(%rbp),%xmm0
movsd  %xmm0,0x2eca(%rip)
movsd  -0x8(%rbp),%xmm0
movsd  0xeb5(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  %xmm0,-0x10(%rbp)
movsd  0xe97(%rip),%xmm0
movsd  %xmm0,0x2eaf(%rip)
movl   $0x0,-0x1c(%rbp)
cmpl   $0xa,-0x1c(%rbp)
jge    11e0 <get_mean_obliquity+0xe0>
movsd  -0x10(%rbp),%xmm0
movslq -0x1c(%rbp),%rcx
lea    0xe9e(%rip),%rax
mulsd  (%rax,%rcx,8),%xmm0
movsd  0xe69(%rip),%xmm1
divsd  %xmm1,%xmm0
addsd  0x2e75(%rip),%xmm0
movsd  %xmm0,0x2e6d(%rip)
movsd  -0x18(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x10(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1188 <get_mean_obliquity+0x88>
movsd  0x2e48(%rip),%xmm0
movsd  0xe30(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,0x2e34(%rip)
movsd  0x2e2c(%rip),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<get_mean_obliquity>:
addsd  0xef8(%rip),%xmm0
divsd  0xef8(%rip),%xmm0
movsd  0x2f08(%rip),%xmm1
ucomisd %xmm0,%xmm1
jne    1124 <get_mean_obliquity+0x24>
jnp    121d <get_mean_obliquity+0x11d>
movsd  %xmm0,0x2ef4(%rip)
divsd  0xedc(%rip),%xmm0
movapd %xmm0,%xmm1
mulsd  %xmm0,%xmm1
movapd %xmm0,%xmm4
unpcklpd %xmm1,%xmm4
mulpd  0xee4(%rip),%xmm4
movapd 0xeec(%rip),%xmm2
divpd  %xmm2,%xmm4
movsd  0xeb8(%rip),%xmm3
addsd  %xmm4,%xmm3
unpckhpd %xmm4,%xmm4
addsd  %xmm3,%xmm4
mulsd  %xmm0,%xmm1
movapd %xmm0,%xmm3
mulsd  %xmm1,%xmm3
unpcklpd %xmm3,%xmm1
mulpd  0xecc(%rip),%xmm1
divpd  %xmm2,%xmm1
addsd  %xmm1,%xmm4
unpckhpd %xmm1,%xmm1
addsd  %xmm4,%xmm1
mulsd  %xmm0,%xmm3
movapd %xmm0,%xmm4
mulsd  %xmm3,%xmm4
unpcklpd %xmm4,%xmm3
mulpd  0xeb4(%rip),%xmm3
divpd  %xmm2,%xmm3
addsd  %xmm3,%xmm1
unpckhpd %xmm3,%xmm3
addsd  %xmm1,%xmm3
mulsd  %xmm0,%xmm4
movapd %xmm0,%xmm1
mulsd  %xmm4,%xmm1
unpcklpd %xmm1,%xmm4
mulpd  0xe9c(%rip),%xmm4
divpd  %xmm2,%xmm4
addsd  %xmm4,%xmm3
unpckhpd %xmm4,%xmm4
mulsd  %xmm0,%xmm1
mulsd  %xmm1,%xmm0
unpcklpd %xmm0,%xmm1
mulpd  0xe8c(%rip),%xmm1
addsd  %xmm3,%xmm4
divpd  %xmm2,%xmm1
addsd  %xmm1,%xmm4
unpckhpd %xmm1,%xmm1
addsd  %xmm4,%xmm1
divsd  0xe10(%rip),%xmm1
movsd  %xmm1,0x2e18(%rip)
movapd %xmm1,%xmm0
ret
movsd  0x2e0b(%rip),%xmm0
ret

LLVM IR (-O0):
@get_mean_obliquity.t0 = internal global double 3.000000e+04
@get_mean_obliquity.rval = internal global double 0.000000e+00
@get_mean_obliquity.rvalStart = internal constant double 0x40F499D72B020C4A
@get_mean_obliquity.OBLIQ_COEFFS = internal constant i32 10
@get_mean_obliquity.coeffs = internal constant [10 x double] [double -4.680930e+05, double -1.550000e+02, double 1.999250e+05, double -5.138000e+03, double -2.496700e+04, double -3.905000e+03, double 7.120000e+02, double 2.787000e+03, double 5.790000e+02, double 2.450000e+02]
define double @get_mean_obliquity(double %0) {
%2 = alloca double
%3 = alloca double
%4 = alloca double
%5 = alloca i32
store double %0, double* %2
%6 = load double, double* %2
%7 = fsub double %6, 0x4142B42C80000000
%8 = fdiv double %7, 3.652500e+04
store double %8, double* %2
%9 = load double, double* @get_mean_obliquity.t0
%10 = load double, double* %2
%11 = fcmp une double %9, %10
br i1 %11, label %12, label %38
12: ; preds = %1
%13 = load double, double* %2
store double %13, double* @get_mean_obliquity.t0
%14 = load double, double* %2
%15 = fdiv double %14, 1.000000e+02
store double %15, double* %4
store double %15, double* %3
store double 0x40F499D72B020C4A, double* @get_mean_obliquity.rval
store i32 0, i32* %5
br label %16
16: ; preds = %32, %12
%17 = load i32, i32* %5
%18 = icmp slt i32 %17, 10
br i1 %18, label %19, label %35
19: ; preds = %16
%20 = load double, double* %3
%21 = load i32, i32* %5
%22 = sext i32 %21 to i64
%23 = getelementptr inbounds [10 x double], [10 x double]* @get_mean_obliquity.coeffs, i64 0, i64 %22
%24 = load double, double* %23
%25 = fmul double %20, %24
%26 = fdiv double %25, 1.000000e+02
%27 = load double, double* @get_mean_obliquity.rval
%28 = fadd double %27, %26
store double %28, double* @get_mean_obliquity.rval
%29 = load double, double* %4
%30 = load double, double* %3
%31 = fmul double %30, %29
store double %31, double* %3
br label %32
32: ; preds = %19
%33 = load i32, i32* %5
%34 = add nsw i32 %33, 1
store i32 %34, i32* %5
br label %16
35: ; preds = %16
%36 = load double, double* @get_mean_obliquity.rval
%37 = fdiv double %36, 3.600000e+03
store double %37, double* @get_mean_obliquity.rval
br label %38
38: ; preds = %35, %1
%39 = load double, double* @get_mean_obliquity.rval
ret double %39
}

LLVM IR (-O2):
@get_mean_obliquity.t0 = internal unnamed_addr global double 3.000000e+04
@get_mean_obliquity.rval = internal unnamed_addr global double 0.000000e+00
define double @get_mean_obliquity(double %0) {
%2 = fadd double %0, 0xC142B42C80000000
%3 = fdiv double %2, 3.652500e+04
%4 = load double, double* @get_mean_obliquity.t0
%5 = fcmp une double %4, %3
br i1 %5, label %8, label %6
6: ; preds = %1
%7 = load double, double* @get_mean_obliquity.rval
br label %60
8: ; preds = %1
store double %3, double* @get_mean_obliquity.t0
%9 = fdiv double %3, 1.000000e+02
%10 = fmul double %9, %9
%11 = insertelement <2 x double> poison, double %9, i64 0
%12 = insertelement <2 x double> %11, double %10, i64 1
%13 = fmul <2 x double> %12, <double -4.680930e+05, double -1.550000e+02>
%14 = fdiv <2 x double> %13, <double 1.000000e+02, double 1.000000e+02>
%15 = extractelement <2 x double> %14, i64 0
%16 = fadd double %15, 0x40F499D72B020C4A
%17 = extractelement <2 x double> %14, i64 1
%18 = fadd double %16, %17
%19 = fmul double %9, %10
%20 = fmul double %9, %19
%21 = insertelement <2 x double> poison, double %19, i64 0
%22 = insertelement <2 x double> %21, double %20, i64 1
%23 = fmul <2 x double> %22, <double 1.999250e+05, double -5.138000e+03>
%24 = fdiv <2 x double> %23, <double 1.000000e+02, double 1.000000e+02>
%25 = extractelement <2 x double> %24, i64 0
%26 = fadd double %18, %25
%27 = extractelement <2 x double> %24, i64 1
%28 = fadd double %26, %27
%29 = fmul double %9, %20
%30 = fmul double %9, %29
%31 = insertelement <2 x double> poison, double %29, i64 0
%32 = insertelement <2 x double> %31, double %30, i64 1
%33 = fmul <2 x double> %32, <double -2.496700e+04, double -3.905000e+03>
%34 = fdiv <2 x double> %33, <double 1.000000e+02, double 1.000000e+02>
%35 = extractelement <2 x double> %34, i64 0
%36 = fadd double %28, %35
%37 = extractelement <2 x double> %34, i64 1
%38 = fadd double %36, %37
%39 = fmul double %9, %30
%40 = fmul double %9, %39
%41 = insertelement <2 x double> poison, double %39, i64 0
%42 = insertelement <2 x double> %41, double %40, i64 1
%43 = fmul <2 x double> %42, <double 7.120000e+02, double 2.787000e+03>
%44 = fdiv <2 x double> %43, <double 1.000000e+02, double 1.000000e+02>
%45 = extractelement <2 x double> %44, i64 0
%46 = fadd double %38, %45
%47 = extractelement <2 x double> %44, i64 1
%48 = fadd double %46, %47
%49 = fmul double %9, %40
%50 = fmul double %9, %49
%51 = insertelement <2 x double> poison, double %49, i64 0
%52 = insertelement <2 x double> %51, double %50, i64 1
%53 = fmul <2 x double> %52, <double 5.790000e+02, double 2.450000e+02>
%54 = fdiv <2 x double> %53, <double 1.000000e+02, double 1.000000e+02>
%55 = extractelement <2 x double> %54, i64 0
%56 = fadd double %48, %55
%57 = extractelement <2 x double> %54, i64 1
%58 = fadd double %56, %57
%59 = fdiv double %58, 3.600000e+03
store double %59, double* @get_mean_obliquity.rval
br label %60
60: ; preds = %6, %8
%61 = phi double [ %7, %6 ], [ %59, %8 ]
ret double %61
}