sinhf.go 742 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package math32
  2. func Sinh(x float32) float32 {
  3. // The coefficients are #2029 from Hart & Cheney. (20.36D)
  4. const (
  5. P0 = -0.6307673640497716991184787251e+6
  6. P1 = -0.8991272022039509355398013511e+5
  7. P2 = -0.2894211355989563807284660366e+4
  8. P3 = -0.2630563213397497062819489e+2
  9. Q0 = -0.6307673640497716991212077277e+6
  10. Q1 = 0.1521517378790019070696485176e+5
  11. Q2 = -0.173678953558233699533450911e+3
  12. )
  13. sign := false
  14. if x < 0 {
  15. x = -x
  16. sign = true
  17. }
  18. var temp float32
  19. switch {
  20. case x > 21:
  21. temp = Exp(x) * 0.5
  22. case x > 0.5:
  23. ex := Exp(x)
  24. temp = (ex - 1/ex) * 0.5
  25. default:
  26. sq := x * x
  27. temp = (((P3*sq+P2)*sq+P1)*sq + P0) * x
  28. temp = temp / (((sq+Q2)*sq+Q1)*sq + Q0)
  29. }
  30. if sign {
  31. temp = -temp
  32. }
  33. return temp
  34. }