extreme_floating_point_values.sf 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. #!/usr/bin/ruby
  2. #
  3. ## https://rosettacode.org/wiki/Extreme_floating_point_values
  4. #
  5. var inf = (1 / 0) #=> Inf
  6. var nan = (0 / 0) #=> NaN
  7. var exprs = [
  8. "1.0 / 0.0", "-1.0 / 0.0", "0.0 / 0.0", "- 0.0",
  9. "inf + 1", "5 - inf", "inf * 5", "inf / 5", "inf * 0",
  10. "1.0 / inf", "-1.0 / inf", "inf + inf", "inf - inf",
  11. "inf * inf", "inf / inf", "inf * 0.0", " 0 < inf", "inf == inf",
  12. "nan + 1", "nan * 5", "nan - nan", "nan * inf", "- nan",
  13. "nan == nan", "nan > 0", "nan < 0", "nan == 0", "0.0 == -0.0",
  14. ]
  15. exprs.each { |expr|
  16. "%15s => %s\n".printf(expr, eval(expr))
  17. }
  18. say "-"*40
  19. say("NaN equality: ", NaN == nan) #=> true
  20. say("Infinity equality: ", Inf == inf) #=> true
  21. say("-Infinity equality: ", -Inf == -inf) #=> true
  22. say "-"*40
  23. say("sqrt(-1) = ", sqrt(-1)); #=> i
  24. say("tanh(-Inf) = ", tanh(-inf)); #=> -1
  25. say("(-Inf)**2 = ", (-inf)**2); #=> Inf
  26. say("(-Inf)**3 = ", (-inf)**3); #=> -Inf
  27. say("acos(Inf) = ", acos(inf)); #=> Inf*i
  28. say("atan(Inf) = ", atan(inf)); #=> pi/2
  29. say("log(-1) = ", log(-1)); #=> pi*i
  30. say("atanh(Inf) = ", atanh(inf)); #=> -pi/2*i