Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static double infiniteSum(DoubleStream ds) { ... }
- double sum = infiniteSum(IntStream.iterate(1, (i -> i + 1))
- .mapToDouble(n -> 1 / ((double)n * n)));
- public static void yeOldeWaye() {
- double sum = 0;
- for (double n = 1; ; n++) {
- double term = 1 / (n * n);
- if (Math.abs(term) <= 1e-12 * Math.abs(sum)) {
- break;
- }
- sum += term;
- }
- System.out.println(sum);
- }
- public static double infiniteSum1(DoubleStream ds) {
- double sum = 0;
- PrimitiveIterator.OfDouble it = ds.iterator();
- while (true) {
- double term = it.next();
- if (Math.abs(term) <= 1e-12 * Math.abs(sum)) {
- break;
- }
- sum += term;
- }
- return sum;
- }
- private static class DoubleAccumulator {
- public double sum;
- public DoubleAccumulator() {
- sum = 0;
- }
- }
- public static double infiniteSum(DoubleStream ds) {
- DoubleAccumulator summer = ds.limit(800000).collect
- (DoubleAccumulator::new,
- (s, d) -> s.sum += d,
- (s1, s2) -> s1.sum += s2.sum);
- return summer.sum;
- }
- public static double infiniteSum(DoubleStream ds) {
- DoubleAccumulator summer = ds.collect
- (DoubleAccumulator::new,
- (s, d) -> { if (Math.abs(d) <= 1e-12 * Math.abs(s.sum)) {
- ds.close(); // AAACK
- } else
- s.sum += d;
- },
- (s1, s2) -> s1.sum += s2.sum);
- return summer.sum;
- }
- class MutableDouble {
- double sum;
- }
- MutableDouble sumHolder=new MutableDouble();
- DoubleStream ds=IntStream.iterate(1, (i -> i + 1))
- .mapToDouble(n -> 1 / ((double)n * n));
- ds.peek(term -> sumHolder.sum+=term)
- .filter(term -> Math.abs(term)<1e-12*Math.abs(sumHolder.sum))
- .findFirst();
- System.out.println(sumHolder.sum);
- double sum = 0;
- for (double n = 1; ; n++) {
- double term = 1 / (n * n);
- sum += term;
- if (Math.abs(term) <= 1e-12 * Math.abs(sum)) {
- break;
- }
- }
- class MutableDouble {
- double sum, next;
- void add(double d) {
- sum=next;
- next+=d;
- }
- }
- MutableDouble sumHolder=new MutableDouble();
- DoubleStream ds=IntStream.iterate(1, (i -> i + 1))
- .mapToDouble(n -> 1 / ((double)n * n));
- ds.peek(sumHolder::add)
- .filter(term -> Math.abs(term)<1e-12*Math.abs(sumHolder.sum))
- .findFirst();
- public static void yeStreamsWaye() {
- System.out.println(stream().sum());
- }
- private static DoubleStream stream() {
- return StreamSupport.doubleStream(Spliterators.spliteratorUnknownSize(new Piterator(),
- Spliterator.ORDERED | Spliterator.IMMUTABLE | Spliterator.NONNULL), false);
- }
- static class Piterator implements PrimitiveIterator.OfDouble {
- private double t = 1;
- @Override public boolean hasNext() { return 1 / (t * t) > 1e-12; }
- @Override public double nextDouble() { return 1 / (t * t++); }
- }
- static int numOfRelevantTerms(IntToDoubleFunction termRule, double precision) {
- int[] fibonacci = {1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169, 63245986, 102334155, 165580141, 267914296, 433494437, 701408733, 1134903170, 1836311903};
- for (int i : fibonacci) {
- double term = termRule.applyAsDouble(i);
- if (term < precision) {
- return i;
- }
- }
- return -1;
- }
- for (int n = 8; ; n *= 2) {
- if (termRule.applyAsDouble(n) < precision) {
- return n;
- }
- }
- static double findSum(IntToDoubleFunction termRule, double precision) {
- int lastInt = numOfRelevantTerms(termRule, precision);
- return IntStream.range(1, lastInt)
- .mapToDouble(termRule)
- .sum();
- }
Add Comment
Please, Sign In to add comment