Baran to prove it lets ignore the hard parts so this approximation is amenable. Then we solve the simpler problem, then lets hope \(sin.f(1,234,567,890)\) is a reasonable approximation to \(1\).

1 angle reduction

angle.reduction.f <- function(x_val){# x_val=given angle
  p_val = 3.14159265358979
  p_half_val = p_val / 2
  i = as.integer(x_val / p_half_val)
  b_val = i - 4 * as.integer(i / 4) + 1
  c_val = x_val
  if (i != 0 & (b_val == 1 | b_val == 3)){
    d_val = c_val / i
    e_val = (p_half_val - d_val) # complement to 90°
    a_val = (e_val * -i)
  } else if (i != -1 & (b_val == 2 | b_val == 4)){
    d_val = c_val / (i + 1)
    e_val = (p_half_val - d_val)  # complement to 90 degrees
    a_val = e_val * (i + 1)
  } else if (i == 0) {
    a_val = c_val
  } else if (i == -1) {
    a_val = -c_val
  }
  return(list(a_val=a_val, b_val=b_val))  
}

2 sine approximation

sin.f <- function(x_val){ # x_val=given angle
  p_val = 3.14159265358979
  eps_val = 10 ^ -30 # sqrt(.Machine$double.eps)

  l=angle.reduction.f(x_val)
  a_val=l$a_val
  b_val=l$b_val
  
  pi_qtr_val = p_val / 4
  if (pi_qtr_val >= a_val){
    e_val = a_val
    f_val = e_val
    g_val = e_val * e_val
    for (i in seq(3, 1000, 2)){
      j = i * (i - 1)
      e_val = e_val * g_val
      e_val = -e_val / j
      f_val = f_val + e_val
      if (abs(e_val) <= eps_val) {break}
    }
    c_val = f_val  
  } else {
    d_val = pi_qtr_val * 2 - a_val
    g_val = d_val
    g_val = g_val * g_val
    e_val = 1
    f_val = e_val
    for (i in seq(2, 1000, 2)){
      j = i * (i - 1)
      e_val = e_val * g_val
      e_val = -e_val / j
      f_val = f_val + e_val
      if (abs(e_val) <= eps_val) {break}
    }
    c_val = f_val  
  }
  if (!(b_val == 1 | b_val == 2)){c_val = -c_val}
  if (abs(c_val) < eps_val){c_val = 0}
  return(c_val)
}
options(digits = 15)
sin.f(1234567890) # 0.9866537
## [1] 0.986653719874146