Raku 列表的汇总列表
Summing list of lists in Raku
我正在尝试对 Raku 中的列表列表求和。示例取自 here:
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)。但是,这有效
say ([1, 2] xx 5).flat.sum;
为什么行为不同?是因为精度吗?
另一件事是
my $arr = ([1e50, 1, -1e50] xx 1000);
my @array = $arr.flat;
我怎样才能使这个扁平化列表中的每个元素高效地 float
?
我知道的一种方法是迭代此列表的每个元素并调用 Num
方法。
my $arr = [1, 2] xx 5; #([1e50, 1, -1e50] xx 10);
my @array = $arr.flat;
for @array {$_=$_.Num};
回答你的第一个问题:是的,它是精度,因为你强迫它使用浮点运算,1
被淹没了。
my @a = |(10**50, 1, -10**50) xx 1000;
say @a.sum; # 1000
使用 10**50
允许 Raku 继续使用(大)整数运算。
为确保数组中的所有元素都是浮点数,您可以在数组定义中添加强制约束:
my Num() @a = |(10**50, 1, -10**50) xx 1000;
say @a.sum; # 0, as the 1's get drowned out again
我正在尝试对 Raku 中的列表列表求和。示例取自 here:
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)。但是,这有效
say ([1, 2] xx 5).flat.sum;
为什么行为不同?是因为精度吗?
另一件事是
my $arr = ([1e50, 1, -1e50] xx 1000);
my @array = $arr.flat;
我怎样才能使这个扁平化列表中的每个元素高效地 float
?
我知道的一种方法是迭代此列表的每个元素并调用 Num
方法。
my $arr = [1, 2] xx 5; #([1e50, 1, -1e50] xx 10);
my @array = $arr.flat;
for @array {$_=$_.Num};
回答你的第一个问题:是的,它是精度,因为你强迫它使用浮点运算,1
被淹没了。
my @a = |(10**50, 1, -10**50) xx 1000;
say @a.sum; # 1000
使用 10**50
允许 Raku 继续使用(大)整数运算。
为确保数组中的所有元素都是浮点数,您可以在数组定义中添加强制约束:
my Num() @a = |(10**50, 1, -10**50) xx 1000;
say @a.sum; # 0, as the 1's get drowned out again