tsums.nim 661 B

12345678910111213141516171819202122232425262728
  1. discard """
  2. matrix: "--mm:refc; --mm:orc"
  3. """
  4. import std/sums
  5. from math import pow
  6. import std/assertions
  7. var epsilon = 1.0
  8. while 1.0 + epsilon != 1.0:
  9. epsilon /= 2.0
  10. let data = @[1.0, epsilon, -epsilon]
  11. doAssert sumKbn(data) == 1.0
  12. # doAssert sumPairs(data) != 1.0 # known to fail in 64 bits
  13. doAssert (1.0 + epsilon) - epsilon != 1.0
  14. var tc1: seq[float]
  15. for n in 1 .. 1000:
  16. tc1.add 1.0 / n.float
  17. doAssert sumKbn(tc1) == 7.485470860550345
  18. doAssert sumPairs(tc1) == 7.485470860550345
  19. var tc2: seq[float]
  20. for n in 1 .. 1000:
  21. tc2.add pow(-1.0, n.float) / n.float
  22. doAssert sumKbn(tc2) == -0.6926474305598203
  23. doAssert sumPairs(tc2) == -0.6926474305598204