声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 10162|回复: 10

[编程技巧] 如何改变数据的有效数字位数

[复制链接]
发表于 2007-1-12 12:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
请教一下:
如何改变数据的有效数字位数。比如:如何将x=0.001200023变成0.0012
谢谢!
回复
分享到:

使用道具 举报

发表于 2007-1-12 12:25 | 显示全部楼层
原帖由 zfx620 于 2007-1-12 12:23 发表
请教一下:
如何改变数据的有效数字位数。比如:如何将x=0.001200023变成0.0012
谢谢!


只能修改显示精度(help format),不能修改计算精度
发表于 2007-1-12 13:03 | 显示全部楼层
计算精度没有必要修改。
 楼主| 发表于 2007-1-12 13:20 | 显示全部楼层
我就要修改计算精度,因为涉及数值积分变换,
发表于 2007-1-12 13:28 | 显示全部楼层
原帖由 zfx620 于 2007-1-12 13:20 发表
我就要修改计算精度,因为涉及数值积分变换,



不是告诉你:不能修改,也没有必要修改吗? 数值积分精度问题设置步长就可以了
 楼主| 发表于 2007-1-12 18:04 | 显示全部楼层
eight,如果没有必要修改,那我修改它干什么!!
就是由于很小的数造成Laplace数值变换解不稳定才想的办法呀
发表于 2007-1-12 18:51 | 显示全部楼层

回复

请先把问题贴出来.
光凭跟你解释, 可能你还是不能理解eight的意思.

[ 本帖最后由 xjzuo 于 2007-1-12 18:57 编辑 ]
发表于 2007-1-13 23:52 | 显示全部楼层

asd

我也希望有高手能解决同样问题
即当我在Simulink下设置一个参数,如double型constant  a=0.2602时,通过一个直接输入输出的S函数模块,即Y=X运算后,用short型scope显示为0.12602,然而,用把该数据保存(save 1.dat a -ascii)下来分析发现,其值为 2.6020001e-001
同时,如果把该模型作成闭环,即Y作为下一刻的输入,保存下来的数据为如下所示,以此递增,似乎有一定的量差在数据的运算过程中
  2.6020001e-001  2.6020001e-001  2.6020002e-001  2.6020002e-001  2.6020003e-001 ...
  2.6020004e-001  2.6020004e-001  2.6020005e-001  2.6020005e-001  2.6020006e-001 ...
  2.6020007e-001  2.6020007e-001  2.6020008e-001  2.6020008e-001  2.6020009e-001 ...
  2.6020010e-001  2.6020010e-001  2.6020011e-001  2.6020011e-001  2.6020012e-001 ...
  2.6020013e-001  2.6020013e-001  2.6020014e-001  2.6020014e-001  2.6020015e-001 ...
  2.6020016e-001  2.6020016e-001  2.6020017e-001  2.6020017e-001  2.6020018e-001 ...
  2.6020019e-001  2.6020019e-001  2.6020020e-001  2.6020020e-001  2.6020021e-001 ...

[ 本帖最后由 ChaChing 于 2009-8-7 23:13 编辑 ]
发表于 2007-1-14 10:22 | 显示全部楼层

回复

再次总结一下:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Matlab只进行强制性的双精度计算,也就是说计算精度不可改变
改变结果的显示精度可用format, digits, vpa实现.
前者虽然在很多情形下被人们认为,其计算精度高,是一个优点。
但也可说是Matlab的一个缺点,因为某些情形下的计算这样处理会相当耗内存.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

至于程序编写时,要提高程序的计算精度,可按eight说的,调整步长.当然,
其实有时候也是为了得到更好的稳定性.

[ 本帖最后由 xjzuo 于 2007-1-14 10:28 编辑 ]

评分

1

查看全部评分

发表于 2009-8-7 23:09 | 显示全部楼层
到底是要修改计算精度, 还是改变数据的有效数字位数?
不是可以如下式改变数据的有效数字位数?
x=0.001200023; xx=double(vpa(x,2));

还有计算精度真的是不可改变的吗?
Fixed-Point Toolbox中的int, int8, int16, int32, uint8, uint16, uint32这些不是吗?
待高人路过澄清!
发表于 2010-3-22 15:16 | 显示全部楼层

回复 楼主 zfx620 的帖子

如何改变数据的有效数字位数。比如:如何将x=0.001200023变成0.0012
谢谢

不是要保留小数点后4位吗,y=round(x*1e4)/1e4; 搞定!
vpa(y,10)=0,0012000000; 满意否?

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-11 14:43 , Processed in 0.073852 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表