免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: jiuling
打印 上一主题 下一主题

use List::Util qw/sum/;求和结果出现很多位小数 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2014-01-22 15:04 |只看该作者
回复 6# jason680


    我的是XP系统,Perl v5.16.1

论坛徽章:
0
12 [报告]
发表于 2014-01-22 15:06 |只看该作者
回复 6# jason680


   没有办法像平常计算那样加起来得出准确结果吗?

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
13 [报告]
发表于 2014-01-22 15:09 |只看该作者
回复 12# jiuling

it also no issue on XP with Perl v5.14.3

C:\bat>perl -v

This is perl 5, version 14, subversion 3 (v5.14.3) built for MSWin32-x86-multi-t
hread
...


C:\bat>sum.pl
84.6
C:\bat>type sum.pl
#!/usr/bin/perl
use List::Util qw/sum/;
@number = (0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0
.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0
.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0
.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0
.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9);
$sum = sum @number;
print $sum;
C:\bat>

论坛徽章:
0
14 [报告]
发表于 2014-01-22 15:13 |只看该作者
jason680 发表于 2014-01-22 15:09
回复 12# jiuling

it also no issue on XP with Perl v5.14.3



奇怪了

论坛徽章:
0
15 [报告]
发表于 2014-01-22 15:15 |只看该作者
MMMIX 发表于 2014-01-22 14:22
可以通过 sprintf 的 FORMAT 指定精度,详见 perldoc -f sprintf


有办法打出准确结果吗?

论坛徽章:
0
16 [报告]
发表于 2014-01-22 15:17 |只看该作者
回复 13# jason680


    你再试试这个:

print 2.76-2.731;

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
17 [报告]
发表于 2014-01-22 15:28 |只看该作者
jiuling 发表于 2014-01-22 15:15
有办法打出准确结果吗?

在精度之内结果本来就是准确的。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
18 [报告]
发表于 2014-01-22 15:31 |只看该作者
回复 9# q1208c


    浮点数精度有限,所以使用的时候不能当作实数,这是使用浮点数的时候必须要考虑的问题,和使用哪种浮点实现没有关系。

浮点除法并不特别复杂,也不存在什么无解的说法。

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
19 [报告]
发表于 2014-01-22 15:45 |只看该作者
回复 16# jiuling


1. it's not Perl issue with float number
    all program language(ex: Java, php, Python, shell, C, awk ....) have the same issue when it use IEEE 754
  http://zh.wikipedia.org/zh-tw/IEEE_754
IEEE二進位浮點數算術標準(IEEE 754)是20世紀80年代以來最廣泛使用的浮點數運算標準,為許多CPU與浮點運算器所採用。這個標準定義了表示浮點數的格式(包括負零-0)與反常值(denormal number)),一些特殊數值(無窮(Inf)與非數值(NaN)),以及這些數值的「浮點數運算子」;它也指明了四種數值修約規則和五種例外狀況(包括例外發生的時機與處理方式)。


2. use below solution if you want to get result

2a: Math::BigFloat
2b: printf, sprintf
2c: use integer to do that

---------------------
use strict;
use warnings;
use Math::BigFloat;

my $n1 = 2.76;
my $n2 = 2.731;
my $d  = 1000;

my $x = Math::BigFloat->new($n1);

print $n1 - $n2, "\n";  # got some issue
print $x - $n2, "\n";   # 2a solution
printf("%.3f\n", $n1 - $n2); # 2b solution

print (($n1*$d - $n2*$d)/$d);  # 2c solution
walklan 该用户已被删除
20 [报告]
发表于 2014-01-26 16:31 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP