Advertisement
Guest User

infinite series sum (Java 8)

a guest
Jul 4th, 2018
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.39 KB | None | 0 0
  1. import java.util.function.IntToDoubleFunction;
  2. import java.util.stream.IntStream;
  3.  
  4. public class Main {
  5.     public static void main(String... args) {
  6.         double x = 0.7034648345913732;
  7.         IntToDoubleFunction termRule = n -> n * Math.pow(x, n);
  8.         IntToDoubleFunction m = accuracyPow -> findSum(termRule, Math.pow(0.1, accuracyPow));
  9.         double sum = m.applyAsDouble(3);
  10.         System.out.println(Math.round(sum));
  11.     }
  12.  
  13.     static double findSum(IntToDoubleFunction termRule, double precision) {
  14.         int lastInt = numOfRelevantTerms(termRule, precision);
  15.         return IntStream.range(1, lastInt)
  16.                 .mapToDouble(termRule)
  17.                 .sum();
  18.     }
  19.  
  20.     static int numOfRelevantTerms(IntToDoubleFunction termRule, double precision) {
  21.         //fibonacci sequence: [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]
  22.         int[] fibo = {13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597};
  23.         for (int i : fibo) {
  24.             double v = termRule.applyAsDouble(i);
  25.             if (v < precision) {
  26.                 return i;
  27.             }
  28.         }
  29.         return -1;
  30.     }
  31. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement