免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2649 | 回复: 18
打印 上一主题 下一主题

[文本处理] awk 浮点数求和 精度不准 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2017-03-01 16:02 |只看该作者 |倒序浏览
awk 'BEGIN{sum=0}{sum+=$1}END{print sum}'
就是这种方式 求和的 但是 当和超过1万的时候 就会有偏差

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
2 [报告]
发表于 2017-03-01 16:29 |只看该作者
回复 1# haofang666777

awk4.0+ 用-M选项

论坛徽章:
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
3 [报告]
发表于 2017-03-01 21:30 |只看该作者
本帖最后由 jason680 于 2017-03-01 21:57 编辑

回复 1# haofang666777

>> 浮点数...精度不准

1.本来就不淮
2. IEEE 754问题

$ echo 0.3 0.3 0.4 | awk '{if($1+$2+$3==1)print "yes";else print "no"}'
yes

$ echo 0.3 0.3 0.3 0.1 | awk '{if($1+$2+$3+$4==1)print "yes";else print "no"}'
no

$ echo 0.3 0.3 0.3 0.1 | awk '{a=$1+$2+$3+$4;if(a==1)print "yes";else print "no";printf("%%d   =%d\n%%f   =%f\n%%.f  =%.f\n%%.20f=%.20f\n",a,a,a,a)}'
no
%d   =0
%f   =1.000000
%.f  =1
%.20f=0.99999999999999988898



$ seq 9 | awk 'function x(n){a=1-n/10;b=1/10*(10-n);printf("a=%.20f\nb=%.20f  %s\n",a,b,(a==b)?"a==b":"a!=b ***")}{x($1)}'
a=0.90000000000000002220
b=0.90000000000000002220  a==b
a=0.80000000000000004441
b=0.80000000000000004441  a==b
a=0.69999999999999995559
b=0.70000000000000006661  a!=b ***
a=0.59999999999999997780
b=0.60000000000000008882  a!=b ***
a=0.50000000000000000000
b=0.50000000000000000000  a==b
a=0.40000000000000002220
b=0.40000000000000002220  a==b
a=0.30000000000000004441
b=0.30000000000000004441  a==b
a=0.19999999999999995559
b=0.20000000000000001110  a!=b ***
a=0.09999999999999997780
b=0.10000000000000000555  a!=b ***




IEEE二进制浮点数算术标准(IEEE 754)是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用。这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denormal number)),一些特殊数值(无穷(Inf)与非数值(NaN)),以及这些数值的“浮点数运算符”;它也指明了四种数值舍入规则和五种例外状况(包括例外发生的时机与处理方式)。

IEEE 754规定了四种表示浮点数值的方式:单精确度(32位)、双精确度(64位)、延伸单精确度(43比特以上,很少使用)与延伸双精确度(79比特以上,通常以80位实现)。只有32位模式有强制要求,其他都是选择性的。大部分编程语言都有提供IEEE浮点数格式与算术,但有些将其列为非必需的。例如,IEEE 754问世之前就有的C语言,现在有包括IEEE算术,但不算作强制要求(C语言的float通常是指IEEE单精确度,而double是指双精确度)。

...

论坛徽章:
0
4 [报告]
发表于 2017-03-02 15:21 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
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
5 [报告]
发表于 2017-03-02 16:19 |只看该作者
回复 4# 本友会机友会摄友会

你在本版(shell)已经有些时日了,我不知道你的目的是什么...
但是如果你要推广powershell,叫大家都来用powershell
正确作法是
1. 给powershell解决方案
2. 再说明 用powershell好处所在

另外一提,一直说别的编程语言问题
是达不你的目的,只会让人xxx...

论坛徽章:
0
6 [报告]
发表于 2017-03-02 16:44 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
7 [报告]
发表于 2017-03-06 12:26 |只看该作者

论坛徽章:
0
8 [报告]
发表于 2017-03-06 16:47 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
9 [报告]
发表于 2017-03-06 16:47 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
10 [报告]
发表于 2017-03-06 16:48 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP