标题:[讨论]c++ double 精度丢失的问题
只看楼主
ysol
Rank: 1
等 级:新手上路
帖 子:107
专家分:0
注 册:2006-6-11
 问题点数:0 回复次数:11 
[讨论]c++ double 精度丢失的问题

#include <iostream>
#include <sstream>
#include <algorithm>
#include <cmath>

typedef unsigned int uint;

long double BinStringToD (string s);//将2进制字符串转化为10进制。

void main(void)
{
string s1="1111111111111111111111111111111111111111111111111111111111111111";
//要进行转换的64位2进制串
cout<<s1.length()<<endl;
cout.precision(20);
cout<<BinStringToD(s1)<<endl;

}


long double BinStringToD (string s)
{
string sU="0", sL="0";
uint tem1=0,tem2=0;
char chr='0';
//截取串,低32位赋给sL,高32位赋给sU.
if(s.length()>32)
{
sU=s.substr(0,(s.length()-32));
sL=s.substr(s.length()-32,32);
}

else
{
sL=s;
sU="";
}
//分别将sL,sU转化成双无符号整形tem1,tem2;
for(istringstream sinL (sL);sinL.get(chr);)
{
tem1<<=1;
tem1+=(chr-48);
}
for(istringstream sinU (sU);sU.length() && sinU.get(chr);)
{
tem2<<=1;
tem2+=(chr-48);
}

//精度丢失!!!!!!!!
long double t1=static_cast<long double>(tem1);
long double t2=static_cast<long double>(tem2);
t1=t1*pow(2,32);
return t1+t2;

}
输出结果为18446744073709552000
正确结果为18446744073709551615

请高手指点!!!!

[此贴子已经被作者于2006-6-11 20:03:35编辑过]

搜索更多相关主题的帖子: double 精度 string include 进制 
2006-06-11 10:48
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
得分:0 
估计你转化时丢的

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-06-11 16:27
ysol
Rank: 1
等 级:新手上路
帖 子:107
专家分:0
注 册:2006-6-11
得分:0 

不转化也一样啊!!郁闷中!!!!!!

2006-06-11 20:04
云中雾
Rank: 1
等 级:新手上路
威 望:1
帖 子:168
专家分:3
注 册:2005-12-30
得分:0 

超出了long double的范围吧


白色的忧郁让我白色的思念从洁白到苍白,从苍白到空白,比空白更空白,变成深白的坦白!
2006-06-13 08:58
ysol
Rank: 1
等 级:新手上路
帖 子:107
专家分:0
注 册:2006-6-11
得分:0 

绝对没有超出long double 的范围阿,long double 20个字节,有效位为64个2进制位!!!

2006-06-16 20:15
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
得分:0 
一个字节8位,64位是20个字节?

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-06-17 09:01
lzrzhao
Rank: 1
来 自:BJ
等 级:新手上路
帖 子:37
专家分:5
注 册:2006-5-22
得分:0 
long double占用10个字节

路漫漫其修远,吾将上下而求索
2006-06-17 17:34
lzrzhao
Rank: 1
来 自:BJ
等 级:新手上路
帖 子:37
专家分:5
注 册:2006-5-22
得分:0 
而且也不是你那样用的

路漫漫其修远,吾将上下而求索
2006-06-17 17:53
lzrzhao
Rank: 1
来 自:BJ
等 级:新手上路
帖 子:37
专家分:5
注 册:2006-5-22
得分:0 
在用cout输出的时候你得定义一下

路漫漫其修远,吾将上下而求索
2006-06-17 17:55
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
得分:0 
word,头像好........
真麻人

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-06-17 18:52



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-71353-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.118682 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved