Advertisement
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++); }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement