gpt4 book ai didi

perl - 我如何解决导致 Perl 的 Statistics::Descriptive 无限循环的舍入错误?

转载 作者:行者123 更新时间:2023-12-02 07:55:51 25 4
gpt4 key购买 nike

我正在使用 Statistics::Descriptive Perl 中的库来计算频率分布并遇到浮点舍入错误问题。

我将两个值 0.205 和 0.205(取自其他数字并 sprintf'd 传递给这些值)传递给统计模块并要求它计算频率分布,但它陷入了无限循环。

通过调试器,我可以看到它在做什么:

my $interval = $self->{sample_range}/$partitions;

my $iter = $self->{min};

while (($iter += $interval) < $self->{max}) {

$bins{$iter} = 0;

push @k, $iter; ##Keep the "keys" unstringified

}

$self->sample_range(范围是最大-最小)返回 2.77555756156289e-17 而不是我期望的 0。这意味着循环 ((min+=range) < max)) 进入了一个(出于所有意图和目的)无限循环。

DB<8> 打印 $self->{max};
0.205
DB<9> 打印 $self->{min};
0.205
DB<10> 打印 $self->{max}-$self->{min};
2.77555756156289e-17

所以这看起来像是一个舍入问题。不过,我想不出如何解决这个问题,而且我不确定编辑库是个好主意。我正在寻找解决方法或替代方案的建议。

干杯,尼尔

最佳答案

我是 Statistics::Descriptive 维护者。由于其数字性质,已报告了许多舍入问题。我相信这个特殊的版本在我最近发布的你正在使用的版本中已修复,通过使用乘法代替 +=。

请使用the most up-to-date version来自 CPAN,应该会更好。

关于perl - 我如何解决导致 Perl 的 Statistics::Descriptive 无限循环的舍入错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/944553/

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