首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Raku中的列表之和

Raku中的列表之和
EN

Stack Overflow用户
提问于 2021-12-01 13:40:53
回答 1查看 118关注 0票数 8

我想总结一下Raku的列表。取自这里的例子

代码语言:javascript
复制
my $arr = ([1e50, 1, -1e50] xx 1000);

say (flat |$arr).sum; # output 0

# https://docs.raku.org/language/operators#infix_xx
# https://docs.raku.org/routine/flat

它输出的0不是预期的(1000)。然而,这是正确的。

代码语言:javascript
复制
say ([1, 2] xx 5).flat.sum;

为什么行为不同?是因为精确吗?

另一件事是

代码语言:javascript
复制
my $arr = ([1e50, 1, -1e50] xx 1000);
my @array = $arr.flat;

如何有效地将这个扁平列表中的每个元素设置为float

我知道的一种方法是迭代这个列表中的每个元素并调用Num方法。

代码语言:javascript
复制
my $arr = [1, 2] xx 5; #([1e50, 1, -1e50] xx 10);

my @array = $arr.flat;
for @array {$_=$_.Num};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-01 14:05:33

要回答你的第一个问题:是的,它是精确的,因为你强迫它使用浮点算法,1就被淹没了。

代码语言:javascript
复制
my @a = |(10**50, 1, -10**50) xx 1000;
say @a.sum;  # 1000

使用10**50允许Raku继续使用(大)整数算法。

为了确保数组中的所有元素都是浮点数,可以在数组定义中添加强制约束:

代码语言:javascript
复制
my Num() @a = |(10**50, 1, -10**50) xx 1000;
say @a.sum;  # 0, as the 1's get drowned out again
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70185263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档