Advertisement
Guest User

Untitled

a guest
Jul 28th, 2014
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.91 KB | None | 0 0
  1. public static double infiniteSum(DoubleStream ds) { ... }
  2.  
  3. double sum = infiniteSum(IntStream.iterate(1, (i -> i + 1))
  4. .mapToDouble(n -> 1 / ((double)n * n)));
  5.  
  6. public static void yeOldeWaye() {
  7. double sum = 0;
  8. for (double n = 1; ; n++) {
  9. double term = 1 / (n * n);
  10. if (Math.abs(term) <= 1e-12 * Math.abs(sum)) {
  11. break;
  12. }
  13. sum += term;
  14. }
  15. System.out.println(sum);
  16. }
  17.  
  18. public static double infiniteSum1(DoubleStream ds) {
  19. double sum = 0;
  20. PrimitiveIterator.OfDouble it = ds.iterator();
  21. while (true) {
  22. double term = it.next();
  23. if (Math.abs(term) <= 1e-12 * Math.abs(sum)) {
  24. break;
  25. }
  26. sum += term;
  27. }
  28. return sum;
  29. }
  30.  
  31. private static class DoubleAccumulator {
  32. public double sum;
  33. public DoubleAccumulator() {
  34. sum = 0;
  35. }
  36. }
  37.  
  38. public static double infiniteSum(DoubleStream ds) {
  39. DoubleAccumulator summer = ds.limit(800000).collect
  40. (DoubleAccumulator::new,
  41. (s, d) -> s.sum += d,
  42. (s1, s2) -> s1.sum += s2.sum);
  43. return summer.sum;
  44. }
  45.  
  46. public static double infiniteSum(DoubleStream ds) {
  47. DoubleAccumulator summer = ds.collect
  48. (DoubleAccumulator::new,
  49. (s, d) -> { if (Math.abs(d) <= 1e-12 * Math.abs(s.sum)) {
  50. ds.close(); // AAACK
  51. } else
  52. s.sum += d;
  53. },
  54. (s1, s2) -> s1.sum += s2.sum);
  55. return summer.sum;
  56. }
  57.  
  58. class MutableDouble {
  59. double sum;
  60. }
  61. MutableDouble sumHolder=new MutableDouble();
  62. DoubleStream ds=IntStream.iterate(1, (i -> i + 1))
  63. .mapToDouble(n -> 1 / ((double)n * n));
  64. ds.peek(term -> sumHolder.sum+=term)
  65. .filter(term -> Math.abs(term)<1e-12*Math.abs(sumHolder.sum))
  66. .findFirst();
  67. System.out.println(sumHolder.sum);
  68.  
  69. double sum = 0;
  70. for (double n = 1; ; n++) {
  71. double term = 1 / (n * n);
  72. sum += term;
  73. if (Math.abs(term) <= 1e-12 * Math.abs(sum)) {
  74. break;
  75. }
  76. }
  77.  
  78. class MutableDouble {
  79. double sum, next;
  80. void add(double d) {
  81. sum=next;
  82. next+=d;
  83. }
  84. }
  85. MutableDouble sumHolder=new MutableDouble();
  86. DoubleStream ds=IntStream.iterate(1, (i -> i + 1))
  87. .mapToDouble(n -> 1 / ((double)n * n));
  88. ds.peek(sumHolder::add)
  89. .filter(term -> Math.abs(term)<1e-12*Math.abs(sumHolder.sum))
  90. .findFirst();
  91.  
  92. public static void yeStreamsWaye() {
  93. System.out.println(stream().sum());
  94. }
  95.  
  96. private static DoubleStream stream() {
  97. return StreamSupport.doubleStream(Spliterators.spliteratorUnknownSize(new Piterator(),
  98. Spliterator.ORDERED | Spliterator.IMMUTABLE | Spliterator.NONNULL), false);
  99. }
  100.  
  101. static class Piterator implements PrimitiveIterator.OfDouble {
  102. private double t = 1;
  103. @Override public boolean hasNext() { return 1 / (t * t) > 1e-12; }
  104. @Override public double nextDouble() { return 1 / (t * t++); }
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement