免费注册 查看新帖 |

Chinaunix

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

一个数学运算的小问题(请教) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-05-24 19:08 |只看该作者 |倒序浏览
一个大数据文件找了半天才查明原因。
cat 1.txt

3.3|9.9|

cat 1.sh

awk 'BEGIN{OFS=FS="|"}{
      a=$2/$1
      b=3
      if ( a == b )
           print a >"ls1.txt"
      if ( a != b )
           print a,b >"ls2.txt"
      }' 1.txt

生成的文件中ls1.txt 为空。2s2.txt为:
cat ls2.txt

3 3
明明a=3,b=3但是a却不等于b;问题找到了,但却不知道为什么?为什么有小数部分的不能比较,但是没有小数部分的却可以比较。请问这是什么原因?怎么解决这个问题呢?

[ 本帖最后由 missme 于 2006-5-24 21:53 编辑 ]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:56:11
2 [报告]
发表于 2006-05-24 21:28 |只看该作者

回复 1楼 missme 的帖子

没有指定分隔符。-F"|"。
可以加调试语句来看。把a的值显示出来。
看机器做的和你想的是否一致。

论坛徽章:
0
3 [报告]
发表于 2006-05-24 21:52 |只看该作者
就是不一致才问啊。分割符忘加是手误。

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
4 [报告]
发表于 2006-05-25 08:56 |只看该作者
在awk中9.9/3.3真的不等于3,试试
awk 'BEGIN{printf "%.64f\n", 9.9/3.3}'


awk 'BEGIN{OFS=FS="|"}{
      a=$2/$1
      sub(//,"",a)
      b=3
      if ( a == b )
           print a >"ls1.txt"
      if ( a != b )
           print a,b >"ls2.txt"
      }' 1.txt



这种方法在数学计算中也比较常见
echo "3.3|9.9|"|awk 'BEGIN{OFS=FS="|"}{
      a=$2/$1
      b=3
      if ( a-b <=1E-15 )
           print a
else
           print a,b
}'
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP