免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1821 | 回复: 3

[文本处理] 帮看看写完的代码算出来的数为什么不对呢 [复制链接]

论坛徽章:
0
发表于 2013-06-01 09:39 |显示全部楼层
本帖最后由 dahaoshanhe 于 2013-06-01 09:40 编辑

输入文件:
  1. 632477.4 5156466.2
  2. 632496.4 5156459.7
  3. 632515.3 5156453.2
  4. 632534.1 5156446.6
  5. 632553.2 5156440.2
  6. 632572.0 5156433.6
复制代码
写的小代码:
  1. awk '
  2. BEGIN{                                                      
  3.    azi=109
  4.    du=(450-azi)/360*3.14159265*2                                               
  5.      cosa=cos(du)                                                                  
  6.      sina=sin(du)                                                                  
  7.     }                                                                             
  8. {                                                                              
  9.    x=$1*cosa+$2*sina                                                              
  10.    y=$2*cosa-$1*sina                                                              
  11.        printf "consa= %s sina= %s x= %s y= %s   newx=%.3f newy=%.3f\n", cosa,sina,$1,$2,x,y                     
  12. }' xyfile > forward_xyfile                                                     
复制代码
计算结果文件:
  1. consa= 0.945519 sina= -0.325568 x= 632477.4 y= 5156466.2   newx=-1080762.088 newy=5081449.069
  2. consa= 0.945519 sina= -0.325568 x= 632496.4 y= 5156459.7   newx=-1080742.007 newy=5081449.109
  3. consa= 0.945519 sina= -0.325568 x= 632515.3 y= 5156453.2   newx=-1080722.021 newy=5081449.116
  4. consa= 0.945519 sina= -0.325568 x= 632534.1 y= 5156446.6   newx=-1080702.096 newy=5081448.997
  5. consa= 0.945519 sina= -0.325568 x= 632553.2 y= 5156440.2   newx=-1080681.953 newy=5081449.164
  6. consa= 0.945519 sina= -0.325568 x= 632572.0 y= 5156433.6   newx=-1080662.029 newy=5081449.044
复制代码
运用 bc  -l 运算
  1. 632477.4*0.945519+5156466.2*-0.325568
  2. -1080760.9890310
复制代码
疑问 怎么一个是 -1080762.088 一个是 -1080760.9890310
为什么会有误差呢,如何能将这个误差消除呢。

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
发表于 2013-06-01 12:17 |显示全部楼层
本帖最后由 cao627 于 2013-06-01 12:36 编辑

@dahaoshanhe我这边
  1. awk '{printf "%.3f", 632477.4*0.945519+5156466.2*-0.325568}'
  2.         
  3. -1080760.989
复制代码
而如果

  1. ~> awk '
  2. BEGIN{                                                      
  3.    azi=109
  4.    du=(450-azi)/360*3.14159265*2                                               
  5.      cosa=cos(du)                                                                  
  6.      sina=sin(du)                                                                  
  7.     }     
  8. {
  9. x=632477.4*cosa+5156466.2*sina
  10. printf "%.3f %s %f",x,cosa,sina
  11. }'

  12. -1080762.088 0.945519 -0.325568
复制代码
看来问题处在x=632477.4*cosa+5156466.2*sina 这一步变量的迭代,实际迭代的值和显示的值不同?,原因未知.

论坛徽章:
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
发表于 2013-06-03 21:26 |显示全部楼层
回复 1# dahaoshanhe

because they are not equal
$ awk 'BEGIN{n=cos((450-109)/180*3.14159265358);printf"%f ",n;if(n==0.945519)print "yes";else print "no"}'
0.945519 no

$ awk 'BEGIN{n=cos((450-109)/180*3.14159265358);printf"%.20f ",n;if(n==0.945519)print "yes";else print "no"}'
0.94551857559327645575 no

google also tell us, it isn't equal 0.945519:
cos(((450 - 109) / 180) * pi) = 0.945518576
   

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
发表于 2013-06-03 21:53 |显示全部楼层
@jason680
!

居然忘记熟入了!

@dahaoshanhe
632477.4*cosa+5156466.2*sina =  -1080762.088  #################### #  1/3*3=1         
632477.4*0.945519+5156466.2*-0.325568= -1080760.9890310  ###########  0.333333*3=0.99999




您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP