您所在位置:论坛首页 — Fortran — 请教数据计算有效位数问题 本帖地址: http://bbs.pfan.cn/post-270938.html [复制地址] [搜索相关帖子] |
|||||
|
|
|||||||
|
|
作者:jiangjieshi 专家分:0 ![]() ![]() |
1
楼
可能大家没太看明白我问的问题,特粘贴一段我的计算结果供参考:
注:坐标之间的差值分别为:0.06、0.02、0.35 节点号 坐标(出问题地方) 沉 降 侧向位移 1709 4.520000 -37.791140 2.508491 1710 4.579999 -37.814840 2.537896 1831 4.599999 -37.803600 2.550540 1832 4.949999 -37.895010 2.675434 1833 5.299999 -38.015690 2.807469 2014 5.319999 -38.027910 2.822308 2015 5.379999 -38.046350 2.858961 2136 5.399999 -38.049700 2.874867 2137 5.749999 -38.172280 3.012630 2138 6.099999 -38.392520 3.152091 2319 6.119999 -38.414430 3.165054 2320 6.179999 -38.465620 3.194743 2441 6.199999 -38.462840 3.207329 2442 6.549999 -38.611050 3.325025 2443 6.899999 -38.791690 3.437730 2624 6.919999 -38.818920 3.448354 2625 6.979999 -38.819960 3.472965 2746 6.999999 -38.816220 3.484732 2747 7.349998 -38.897820 3.595408 2748 7.699998 -39.082730 3.715924 2929 7.719998 -39.102110 3.726687 2930 7.779998 -39.146670 3.750532 3051 7.799999 -39.141610 3.761292 3052 8.149998 -39.255100 3.869553 3053 8.499998 -39.414050 3.977437 3234 8.519999 -39.445520 3.986840 3235 8.579999 -39.454880 4.008219 3356 8.599998 -39.456930 4.019127 3357 8.949998 -39.457050 4.120214 3358 9.299998 -39.582820 4.253435 3539 9.319999 -39.583080 4.265284 3540 9.379999 -39.585590 4.291709 3661 9.399999 -39.575980 4.303952 3662 9.749998 -39.640370 4.424768 3663 10.100000 -39.755250 4.545651 3844 10.120000 -39.782140 4.556908 3845 10.180000 -39.779690 4.583207 怎样避免这样的计算误差?谢谢!
|
|
作者:lishhit 专家分:1650 ![]() ![]() ![]() ![]() ![]() |
2
楼
在数字后面加d0也不行吗 试试
此帖尚未评分
|
|
作者:jason388 专家分:1430 ![]() ![]() ![]() ![]() |
3
楼
在GFortran中没有出现你说的现象: program ab real a,b a=19.98 b=0.02 write(*,*)a,b,a+b end program ab a+b=20.000000 如果通过数据文件传输数据,而又要求保持足够的精度,建议计算时采用双精度(或你希望的精度),然后输出时采用宽度足够的g格式符,避免因为数据文件采用较少位数的格式输出造成精度损失。 如果是程序内部传输数据,则不会造成精度损失,当然前提是你声明的精度能够保证计算的需要,比如需要10位有效数字,单精度就不够了,因为单精度只有7位。
此帖尚未评分
|
|
作者:jiangjieshi 专家分:0 ![]() ![]() |
4
楼
谢谢!我不太明白您的意思,在数字后面加d0?能详细说一下吗?
|
|
作者:jiangjieshi 专家分:0 ![]() ![]() |
5
楼
我用的powerstation version 4.0,正常情况下是不会出现我说的情况,就是在一些比较大型的计算中才会偶尔出现,这就取决与单元网格的划分大小了,网格单元较大的时候一般不会出现,但较小的时候就会偶尔出现(不是都出现,比如说我的网格宽度为0.2时就不出现这样的情况,但网格宽度为0.25时就出现了),很奇怪!
|
|
作者:jason388 专家分:1430 ![]() ![]() ![]() ![]() |
6
楼
我觉得你提的问题不是计算精度而是浮点数的显示问题。 由于浮点数在机器内部无法准确表示,所以其精度取决于程序选择的精度,如单精度(kind=4)其有效数字为6位,6位之外是不准确的。因此,程序设计时应该根据问题范围精度要求等选择合适的浮点数精度,而不能奢望机器给出与人算的一样的结果。如果计算机语言提供的精度仍然无法满足需要,那就要设计或寻求算法的改进。 计算结果的显示则是另外的问题。一般情况下合理选择Fortran提供的格式符能够满足大部分的需要。当然在很多情况下图形显示会更直观。
此帖尚未评分
|
|
作者:xuanchuan 专家分:0 ![]() ![]() |
7
楼
MV2007是猜猜工作室推出的一款多媒体网络即时通讯软件。mv2007聊天室整合网络电话、视频会议、聊天室、文件传输等多种功能于一身,mv聊天室具有超清晰的语音对话、高品质的视频传输效果,飞一般的文件传输速度,支持断点续传,独特的防火墙和NAT穿透功能,采用服务器中转机制,保证即时发送、接收消息、文件及点对点的语音、视频通讯的高连通率.
官方主页:http://www.mv178.com 华军下载:http://nj.onlinedown.net/soft/55764.htm 天空下载:http://www.skycn.com/soft/33785.html
此帖尚未评分
|
|
作者:febi 专家分:0 ![]() ![]() |
8
楼
输出的有效位数控制一下。或用real(8)型
此帖尚未评分
|
|