24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1370  |  回复: 7

xpk250

新虫 (初入文坛)


[交流] 【求助】MTALAB导入数据的精度。。。

小弟使用MATLAB从excel导入数据,excel里面的数据是小数点后十二位的科学计数法,但是导入以后MATLAB默认的是双精度,由于计算需要,不能使用双精度,求各位大虾指点解决办法。。。
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

» 抢金币啦!回帖就可以得到:

查看全部散金贴

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)


★ ★
微尘、梦想(金币+2): 谢谢回复…… 2011-04-12 15:08:18
xpk250(金币+1): 2011-05-20 17:15:39
MATLAB基本类型中浮点数最高也就双精度

你确认需要精确到十进制浮点后的第12位?这个必要性请先想想,如果误差允许,用双精度就可以

如果确实有这个必要,实现的方法比较麻烦,还得自己定义运算了,就是像那些“大数算法”一样,加减乘除都要重新实现一遍(嗯,可能不用像大数算法那么麻烦,用int64表示数据,再用一个int32表示指数...不过总之还得自己实现吧)

[ Last edited by sudo on 2011-4-12 at 14:26 ]
2楼2011-04-12 14:22:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

微尘、梦想(金币+1): 谢谢参与…… 2011-04-13 15:32:38
引用回帖:
Originally posted by xpk250 at 2011-04-12 14:10:54:
小弟使用MATLAB从excel导入数据,excel里面的数据是小数点后十二位的科学计数法,但是导入以后MATLAB默认的是双精度,由于计算需要,不能使用双精度,求各位大虾指点解决办法。。。

双精度最多可以到小数点后 15 位还是多少来着,不比十二位更精确?

如果你觉得 15 位大多了,大可以 round 啥的啊……
3楼2011-04-12 14:42:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)



jjdg(金币+1): 感谢讲解 2011-04-13 01:19:59
引用回帖:
Originally posted by snoopyzhao at 2011-04-12 14:42:18:
双精度最多可以到小数点后 15 位还是多少来着,不比十二位更精确?

如果你觉得 15 位大多了,大可以 round 啥的啊……

嗯,这是一个误区

http://en.wikipedia.org/wiki/Dou ... oating-point_format

虽然IEEE标准之双精度尾数有52位,折算成十进制约为

2^(-52) = 2.22 * 10^(-16)

也就是你说的精确到“15位”

其实不然,这个二进制到十进制的转换过程使得对于不同数字的精度不同。举个例子来说,双精度能精确表达2^(-52)这个数,却只能近似表达0.1这个数

这个问题很多教科书描述的都不严谨的,嗯=,=

因为这个原因,在C#里面引入了decimal这个数据类型,来满足十进制小数的高精度需求
http://msdn.microsoft.com/zh-cn/library/364x0z75(v=vs.80).aspx

不知道楼主的需求是什么呢,一不小心可能扯远了,呵呵呵
4楼2011-04-12 14:54:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xpk250

新虫 (初入文坛)


引用回帖:
Originally posted by sudo at 2011-04-12 14:54:15:
嗯,这是一个误区

http://en.wikipedia.org/wiki/Dou ... oating-point_format

虽然IEEE标准之双精度尾数有52位,折算成十进制约为

2^(-52) = 2.22 * 10^(-16)

也就是你说的 ...

数据要求高。。。不能只用到小数点后5位啊。。。我只是要导入到数据在显示和运算的时候能精确到小数点后12位。。。
5楼2011-04-12 16:32:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)


引用回帖:
Originally posted by xpk250 at 2011-04-12 16:32:18:
数据要求高。。。不能只用到小数点后5位啊。。。我只是要导入到数据在显示和运算的时候能精确到小数点后12位。。。

根据你的描述,可能你只是关注小数的“显示”的问题...那么...

a=1.1234567890123456;
fprintf(1, '%.12f', a)

嗯~
6楼2011-04-12 18:12:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

cyl1124

荣誉版主 (文坛精英)



微尘、梦想(金币+1): 谢谢参与…… 2011-04-13 15:32:10
设置计算机的字位步长
7楼2011-04-12 20:39:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jjdg(金币+1): 感谢说明 2011-04-13 01:20:33
matlab的double精度够了吧
只是print到command window的时候你看不到那么多而已
8楼2011-04-13 00:34:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 xpk250 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见