gpt4 book ai didi

java - Java 8 中使用流的 Double 值的 Python 范围函数

转载 作者:行者123 更新时间:2023-11-29 07:25:41 25 4
gpt4 key购买 nike

我想在 Java 中创建一个 double 组,其中包含从 0 到 100 的值,步长为 0.1

在 Python 中,可以使用范围函数:range(0, 100, 0.1)

在 Java 8 中,这会起作用:

Double[] x = DoubleStream.iterate(0.1, i -> i + 0.1).limit(1000).boxed().toArray(Double[]::new);

我可以使用更简单的方法吗?

最佳答案

您的解决方案似乎可行,但在连续计算时会遇到浮点舍入问题。

[0.1, 0.2, 0.30000000000000004, 0.4, 0.5, 0.6, 0.7, 0.7999999999999999, 0.8999999999999999, 0.9999999999999999, 1.0999999999999999,

看来 DoubleStream没有 range方法,但是 IntStream does, rangeClosed ,但您无法控制增量。 (也有range,但结束参数不在范围内。)

Returns a sequential ordered IntStream from startInclusive (inclusive) to endInclusive (inclusive) by an incremental step of 1.

您可以通过流式传输一些 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; }

关于java - Java 8 中使用流的 Double 值的 Python 范围函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53566943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com