Ваше решение работает, но оно страдает от округления с плавающей точкой при последовательных вычислениях.
[0,1, 0,2, 0,30000000000000004, 0,4, 0,5, 0,6, 0,7, 0,7999999999999999, 0,899999999999999999, 0.9999999999999999, 1.0999999999999999,
Похоже, что DoubleStream
не имеет range
метода, но IntStream
, rangeClosed
, но вы неt контролировать приращение.(Также существует range
, но конечный параметр не включен в диапазон.)
Возвращает последовательный порядок IntStream
от startInclusive
(включительно) до endInclusive
(включительно)с шагом 1. 1. 1020 *
Вы можете обойти кумулятивные ошибки округления с плавающей запятой, передавая потоковые значения int
с, затем делив на 10.0
, чтобы получить приращения 0.1
,Кроме того, как уже отмечалось, проще иметь массив примитивов double[]
, чтобы избежать упаковки и дополнительного использования памяти.
double[] y = IntStream.rangeClosed(0, 1000)
.mapToDouble(i -> i / 10.0)
.toArray();
[0,0, 0,1, 0,2, 0,3, 0,4, 0,5, 0,6, 0,7, 0,8, 0,9, 1,0, 1,1, 1,2, 1,3, 1,4, 1,5, 1,6, 1,7, 1,8, 1,9, 2,0, 2,1, 2,2, 2,3, 2,4, 2,5,
Конечно, всегда есть базовый цикл for
, который для меня выглядит довольно простым.
double[] z = new double[1001];
for (int i = 0; i < z.length; i++) { z[i] = i / 10.0; }