double data_nuclear_radius(double Z, double A) {
  static const double rN[120] = {
      2.098, 0.858, 1.680, 2.400, 2.518, 2.405, 2.470, 2.548, 2.734, 2.900,
      2.993, 2.940, 3.043, 3.035, 3.098, 3.187, 3.245, 3.360, 3.413, 3.408,
      3.477, 3.443, 3.595, 3.600, 3.644, 3.681, 3.748, 3.843, 3.776, 3.943,
      3.942, 4.032, 4.065, 4.078, 4.123, 4.135, 4.188, 4.209, 4.237, 4.249,
      4.306, 4.318, 4.363, 4.388, 4.432, 4.435, 4.479, 4.520, 4.612, 4.646,
      4.640, 4.630, 4.714, 4.706, 4.756, 4.774, 4.823, 4.848, 4.878, 4.897,
      4.927, 4.948, 5.054, 5.093, 5.133, 5.177, 5.197, 5.210, 5.264, 5.301,
      5.390, 5.371, 5.429, 5.479, 5.423, 5.400, 5.409, 5.411, 5.387, 5.318,
      5.404, 5.471, 5.498, 5.520, 5.520, 5.529, 5.629, 5.637, 5.661, 5.669,
      5.710, 5.701, 5.784, 5.825, 5.824, 5.817, 5.843, 5.843, 5.868, 5.875,
      5.906, 5.912, 5.918, 5.937, 5.967, 5.973, 5.979, 5.985, 5.980, 6.033,
      6.051, 6.056, 6.074, 6.079, 6.097, 6.097, 6.119, 6.125, 6.125, 2.958};
  int iN = (int)Z;
  const int nN = sizeof(rN) / sizeof(rN[0]);
  if (iN >= nN - 1)
    iN = nN - 2;
  else if ((iN == 1) && (A >= 1.5)) {
    iN = 0;
  } else if ((iN == 11) && (A == 22.)) {
    iN = nN - 1;
  }
  return rN[iN] * 1E-15;
}


x86 assembly (clang, -O0):
<data_nuclear_radius>:
push   %rbp
mov    %rsp,%rbp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
cvttsd2si -0x8(%rbp),%eax
mov    %eax,-0x14(%rbp)
movl   $0x78,-0x18(%rbp)
cmpl   $0x77,-0x14(%rbp)
jl     1133 <data_nuclear_radius+0x33>
movl   $0x76,-0x14(%rbp)
jmp    1198 <data_nuclear_radius+0x98>
cmpl   $0x1,-0x14(%rbp)
jne    1160 <data_nuclear_radius+0x60>
movsd  -0x10(%rbp),%xmm0
movsd  0xeb6(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     1160 <data_nuclear_radius+0x60>
movl   $0x0,-0x14(%rbp)
jmp    1193 <data_nuclear_radius+0x93>
cmpl   $0xb,-0x14(%rbp)
jne    118e <data_nuclear_radius+0x8e>
movsd  -0x10(%rbp),%xmm0
movsd  0xe91(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    118e <data_nuclear_radius+0x8e>
jp     118e <data_nuclear_radius+0x8e>
movl   $0x77,-0x14(%rbp)
jmp    1193 <data_nuclear_radius+0x93>
jmp    1198 <data_nuclear_radius+0x98>
movslq -0x14(%rbp),%rcx
movsd  0xe6c(%rip),%xmm0
lea    0xe75(%rip),%rax
mulsd  (%rax,%rcx,8),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<data_nuclear_radius>:
cvttsd2si %xmm0,%eax
mov    $0x76,%ecx
cmp    $0x76,%eax
jg     1140 <data_nuclear_radius+0x40>
cmp    $0x1,%eax
jne    1121 <data_nuclear_radius+0x21>
ucomisd 0xee5(%rip),%xmm1
jb     1121 <data_nuclear_radius+0x21>
xor    %ecx,%ecx
jmp    1140 <data_nuclear_radius+0x40>
ucomisd 0xedf(%rip),%xmm1
movslq %eax,%rdx
mov    $0x77,%ecx
cmovne %rdx,%rcx
cmovp  %rdx,%rcx
cmp    $0xb,%eax
cmovne %rdx,%rcx
lea    0xed9(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
mulsd  0xebc(%rip),%xmm0
ret

LLVM IR (-O0):
@data_nuclear_radius.rN = internal constant [120 x double] [double 2.098000e+00, double 8.580000e-01, double 1.680000e+00, double 2.400000e+00, double 2.518000e+00, double 2.405000e+00, double 2.470000e+00, double 2.548000e+00, double 2.734000e+00, double 2.900000e+00, double 2.993000e+00, double 2.940000e+00, double 3.043000e+00, double 3.035000e+00, double 3.098000e+00, double 3.187000e+00, double 3.245000e+00, double 3.360000e+00, double 3.413000e+00, double 3.408000e+00, double 3.477000e+00, double 3.443000e+00, double 3.595000e+00, double 3.600000e+00, double 3.644000e+00, double 3.681000e+00, double 3.748000e+00, double 3.843000e+00, double 3.776000e+00, double 3.943000e+00, double 3.942000e+00, double 4.032000e+00, double 4.065000e+00, double 4.078000e+00, double 4.123000e+00, double 4.135000e+00, double 4.188000e+00, double 4.209000e+00, double 4.237000e+00, double 4.249000e+00, double 4.306000e+00, double 4.318000e+00, double 4.363000e+00, double 4.388000e+00, double 4.432000e+00, double 4.435000e+00, double 4.479000e+00, double 4.520000e+00, double 4.612000e+00, double 4.646000e+00, double 4.640000e+00, double 4.630000e+00, double 4.714000e+00, double 4.706000e+00, double 4.756000e+00, double 4.774000e+00, double 4.823000e+00, double 4.848000e+00, double 4.878000e+00, double 4.897000e+00, double 4.927000e+00, double 4.948000e+00, double 5.054000e+00, double 5.093000e+00, double 5.133000e+00, double 5.177000e+00, double 5.197000e+00, double 5.210000e+00, double 5.264000e+00, double 5.301000e+00, double 5.390000e+00, double 5.371000e+00, double 5.429000e+00, double 5.479000e+00, double 5.423000e+00, double 5.400000e+00, double 5.409000e+00, double 5.411000e+00, double 5.387000e+00, double 5.318000e+00, double 5.404000e+00, double 5.471000e+00, double 5.498000e+00, double 5.520000e+00, double 5.520000e+00, double 5.529000e+00, double 5.629000e+00, double 5.637000e+00, double 5.661000e+00, double 5.669000e+00, double 5.710000e+00, double 5.701000e+00, double 5.784000e+00, double 5.825000e+00, double 5.824000e+00, double 5.817000e+00, double 5.843000e+00, double 5.843000e+00, double 5.868000e+00, double 5.875000e+00, double 5.906000e+00, double 5.912000e+00, double 5.918000e+00, double 5.937000e+00, double 5.967000e+00, double 5.973000e+00, double 5.979000e+00, double 5.985000e+00, double 5.980000e+00, double 6.033000e+00, double 6.051000e+00, double 6.056000e+00, double 6.074000e+00, double 6.079000e+00, double 6.097000e+00, double 6.097000e+00, double 0x401879DB22D0E560, double 6.125000e+00, double 6.125000e+00, double 2.958000e+00]
define double @data_nuclear_radius(double %0, double %1) {
%3 = alloca double
%4 = alloca double
%5 = alloca i32
%6 = alloca i32
store double %0, double* %3
store double %1, double* %4
%7 = load double, double* %3
%8 = fptosi double %7 to i32
store i32 %8, i32* %5
store i32 120, i32* %6
%9 = load i32, i32* %5
%10 = icmp sge i32 %9, 119
br i1 %10, label %11, label %12
11: ; preds = %2
store i32 118, i32* %5
br label %28
12: ; preds = %2
%13 = load i32, i32* %5
%14 = icmp eq i32 %13, 1
br i1 %14, label %15, label %19
15: ; preds = %12
%16 = load double, double* %4
%17 = fcmp oge double %16, 1.500000e+00
br i1 %17, label %18, label %19
18: ; preds = %15
store i32 0, i32* %5
br label %27
19: ; preds = %15, %12
%20 = load i32, i32* %5
%21 = icmp eq i32 %20, 11
br i1 %21, label %22, label %26
22: ; preds = %19
%23 = load double, double* %4
%24 = fcmp oeq double %23, 2.200000e+01
br i1 %24, label %25, label %26
25: ; preds = %22
store i32 119, i32* %5
br label %26
26: ; preds = %25, %22, %19
br label %27
27: ; preds = %26, %18
br label %28
28: ; preds = %27, %11
%29 = load i32, i32* %5
%30 = sext i32 %29 to i64
%31 = getelementptr inbounds [120 x double], [120 x double]* @data_nuclear_radius.rN, i64 0, i64 %30
%32 = load double, double* %31
%33 = fmul double %32, 1.000000e-15
ret double %33
}

LLVM IR (-O2):
@data_nuclear_radius.rN = internal unnamed_addr constant [120 x double] [double 2.098000e+00, double 8.580000e-01, double 1.680000e+00, double 2.400000e+00, double 2.518000e+00, double 2.405000e+00, double 2.470000e+00, double 2.548000e+00, double 2.734000e+00, double 2.900000e+00, double 2.993000e+00, double 2.940000e+00, double 3.043000e+00, double 3.035000e+00, double 3.098000e+00, double 3.187000e+00, double 3.245000e+00, double 3.360000e+00, double 3.413000e+00, double 3.408000e+00, double 3.477000e+00, double 3.443000e+00, double 3.595000e+00, double 3.600000e+00, double 3.644000e+00, double 3.681000e+00, double 3.748000e+00, double 3.843000e+00, double 3.776000e+00, double 3.943000e+00, double 3.942000e+00, double 4.032000e+00, double 4.065000e+00, double 4.078000e+00, double 4.123000e+00, double 4.135000e+00, double 4.188000e+00, double 4.209000e+00, double 4.237000e+00, double 4.249000e+00, double 4.306000e+00, double 4.318000e+00, double 4.363000e+00, double 4.388000e+00, double 4.432000e+00, double 4.435000e+00, double 4.479000e+00, double 4.520000e+00, double 4.612000e+00, double 4.646000e+00, double 4.640000e+00, double 4.630000e+00, double 4.714000e+00, double 4.706000e+00, double 4.756000e+00, double 4.774000e+00, double 4.823000e+00, double 4.848000e+00, double 4.878000e+00, double 4.897000e+00, double 4.927000e+00, double 4.948000e+00, double 5.054000e+00, double 5.093000e+00, double 5.133000e+00, double 5.177000e+00, double 5.197000e+00, double 5.210000e+00, double 5.264000e+00, double 5.301000e+00, double 5.390000e+00, double 5.371000e+00, double 5.429000e+00, double 5.479000e+00, double 5.423000e+00, double 5.400000e+00, double 5.409000e+00, double 5.411000e+00, double 5.387000e+00, double 5.318000e+00, double 5.404000e+00, double 5.471000e+00, double 5.498000e+00, double 5.520000e+00, double 5.520000e+00, double 5.529000e+00, double 5.629000e+00, double 5.637000e+00, double 5.661000e+00, double 5.669000e+00, double 5.710000e+00, double 5.701000e+00, double 5.784000e+00, double 5.825000e+00, double 5.824000e+00, double 5.817000e+00, double 5.843000e+00, double 5.843000e+00, double 5.868000e+00, double 5.875000e+00, double 5.906000e+00, double 5.912000e+00, double 5.918000e+00, double 5.937000e+00, double 5.967000e+00, double 5.973000e+00, double 5.979000e+00, double 5.985000e+00, double 5.980000e+00, double 6.033000e+00, double 6.051000e+00, double 6.056000e+00, double 6.074000e+00, double 6.079000e+00, double 6.097000e+00, double 6.097000e+00, double 0x401879DB22D0E560, double 6.125000e+00, double 6.125000e+00, double 2.958000e+00]
define double @data_nuclear_radius(double %0, double %1) {
%3 = fptosi double %0 to i32
%4 = icmp sgt i32 %3, 118
br i1 %4, label %15, label %5
5: ; preds = %2
%6 = icmp eq i32 %3, 1
%7 = fcmp oge double %1, 1.500000e+00
%8 = and i1 %6, %7
br i1 %8, label %15, label %9
9: ; preds = %5
%10 = icmp eq i32 %3, 11
%11 = fcmp oeq double %1, 2.200000e+01
%12 = and i1 %10, %11
%13 = sext i32 %3 to i64
%14 = select i1 %12, i64 119, i64 %13
br label %15
15: ; preds = %5, %2, %9
%16 = phi i64 [ %14, %9 ], [ 118, %2 ], [ 0, %5 ]
%17 = getelementptr inbounds [120 x double], [120 x double]* @data_nuclear_radius.rN, i64 0, i64 %16
%18 = load double, double* %17
%19 = fmul double %18, 1.000000e-15
ret double %19
}