Category:

Забавная арифметика.


Есть фунция на Julia
function pconcat(x,y,arc)
  xe = exp(x)
  xm = 1.0/xe
  ye = exp(y)
  ym = 1.0/ye
  c = cos(arc)

  xc = xe+xm
  xs = xe-xm
  yc = ye+ym
  ys = ye-ym

  l = (xc*yc + xs*ys*c)/4

  larc = (xc*l - yc)/(xs*(sqrt((l-1)*(l+1))))

  (acosh(l), acos(larc)*sign(arc))
end

Вольфрам альфа говорит, что pconcat(x,y,0) должен быть равен (x+y,0). Чаще всего так оно и есть, но если вдруг x и y окажутся близки к N*1.09054966350708617, иногда наступает военное время и косинус оказывается больше единицы. Там надо явную проверку вставить, или есть какой-то более правильный способ это починить?