Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.function.IntToDoubleFunction;
- import java.util.stream.IntStream;
- public class Main {
- public static void main(String... args) {
- double x = 0.7034648345913732;
- IntToDoubleFunction termRule = n -> n * Math.pow(x, n);
- IntToDoubleFunction m = accuracyPow -> findSum(termRule, Math.pow(0.1, accuracyPow));
- double sum = m.applyAsDouble(3);
- System.out.println(Math.round(sum));
- }
- static double findSum(IntToDoubleFunction termRule, double precision) {
- int lastInt = numOfRelevantTerms(termRule, precision);
- return IntStream.range(1, lastInt)
- .mapToDouble(termRule)
- .sum();
- }
- static int numOfRelevantTerms(IntToDoubleFunction termRule, double precision) {
- //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]
- int[] fibo = {13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597};
- for (int i : fibo) {
- double v = termRule.applyAsDouble(i);
- if (v < precision) {
- return i;
- }
- }
- return -1;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement