免费注册 查看新帖 |

Chinaunix

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

[新手入门] 哪位大虾帮忙? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-02-23 15:51 |只看该作者 |倒序浏览
AIX 4.3.3
1)程序 test1.c
#include <stdio.h>;
#include <stdlib.h>;
#include <string.h>;
#include <strings.h>;
#include <float.h>;

void main(){
long double dTest = 123456789.12345678912345;
char cStr[1000];

memset(cStr, 0, sizeof(cStr));

printf("dTest = [%Lf]\n", dTest);

printf("dTest_18 = [%.*Lf]\n", 18, dTest);

sprintf(cStr, "%.*Lf", 18, dTest);
printf("dTest in String = [%s]\n", cStr);
}

2)编译
cc -o mytest3 -q64 test1.c
3)执行
./mytest3
dTest = [123456789.123457]
dTest_18 = [123456789.123456791043281555]
dTest in String = [123456789.123456791043281555]
4)问题
long double达不到64位下31位有效精度

论坛徽章:
0
2 [报告]
发表于 2004-02-23 18:23 |只看该作者

哪位大虾帮忙?

俺在线等了这么长时间,有没有高人帮助解决?

论坛徽章:
0
3 [报告]
发表于 2004-02-24 08:18 |只看该作者

哪位大虾帮忙?

在线等了一个晚上,也试了一个晚上,依然没有结果,难道这里就没有牛人吗?实在不行,看来只能到美国的网站上找答案了,这里的大虾也不过如此!

论坛徽章:
0
4 [报告]
发表于 2004-02-24 08:37 |只看该作者

哪位大虾帮忙?

void main(){
long double dTest = 123456789123456789.12345L;
long double dTest1 = 123456789123456789.12346L;
char cStr[1000];

printf("%d\n",sizeof(dTest));
if(dTest == dTest1)
printf("OK\n";
memset(cStr, 0, sizeof(cStr));

printf("dTest = [%Lf]\n", dTest);

printf("dTest_18 = [%.*Lf]\n", 18, dTest);

sprintf(cStr, "%.*Lf", 18, dTest);
printf("dTest in String = [%s]\n", cStr);
}
$ cc -qlongdouble -o aa aa.c
$ ./aa
16
dTest = [123456789123456784.000000]
dTest_18 = [123456789123456784.000000000000000000]
dTest in String = [123456789123456784.000000000000000000]
试试这个程序
看看有没有OK

论坛徽章:
0
5 [报告]
发表于 2004-02-24 09:41 |只看该作者

哪位大虾帮忙?

谢谢楼上的,但是问题不是依然没有解决吗?你的输出结果依然没有达到相应的精度呀。

论坛徽章:
0
6 [报告]
发表于 2004-02-24 10:09 |只看该作者

哪位大虾帮忙?

老大:
小数点以后得精度是很难按本本得要求得到得。如果确实需要,建议*10000000000以后试试,或者干脆用字符串。科学计算得话,自己有专门得方法吧。系统得功能是面向大众得,有些功能得实现靠自己。
laurels_xia 该用户已被删除
7 [报告]
发表于 2004-02-24 10:26 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
8 [报告]
发表于 2004-02-24 10:33 |只看该作者

哪位大虾帮忙?

精度已经实现了呀,建议你去看看相关的资料,就知道printf为什么会这样了。

论坛徽章:
0
9 [报告]
发表于 2004-02-24 10:36 |只看该作者

哪位大虾帮忙?

[quote]原帖由 "ifx"]精度已经实现了呀,建议你去看看相关的资料,就知道printf为什么会这样了。[/quote 发表:



说出来,大家学习一下!谢谢

论坛徽章:
0
10 [报告]
发表于 2004-02-24 10:50 |只看该作者

哪位大虾帮忙?

如果说态度的问题,我想我有必要道歉。但是问题确实需要解决,我试过*100000的办法,都是只取15位有效数字,但是我在另一个系统下:p630+AIX5.1(纯64bit)+Gcc,还是一样的结果,一个字都不差,于是,我又使用xlc128,cc128,虽然sizeof(long double)由8 变成了16,但是输出结果还是没有任何改变,谁能说说这是为什么?
我们在探讨问题,不是赌气,所以,有不对的地方请大家见谅,请大家一起讨论,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP