您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> BF53X字长截短疑问
本帖共有746个阅读者
发表帖子 发表投票 回复主题
BF53X字长截短疑问
blackfin(论坛游民)
blackfin
头衔:社区公民
帮派:无帮无派
帖数:114
金钱:1105
积分:153
注册时间:2011/6/10
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
BF53X字长截短疑问
定义如下测试代码
#define CONST_PI 3.1415926535897932384626433832795

void main(void)
{    
    float f_data;
    double d_data;
    
    f_data = CONST_PI;
    d_data = CONST_PI;
}
运行后结果:
f_data = 3.14159;
d_data = 3.141592653589793;
float数从小数点后5位截断(四舍五入);double数从小数点后15位截断。
请问如果我想进一步提高f_data数的精度,但又不需double数这样的高精度大数。有没有什么办法呢?谢谢!

这家伙很懒,什么也没有留下!
等级:论坛游民 参考IP地址:*.*.*.*
2011/6/18 9:43:27
DSP菜鸟(论坛新手)
DSP菜鸟
头衔:社区公民
帮派:无帮无派
帖数:5
金钱:120
积分:4
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

可以用两个float 类型的变量,一个代表高位,一个代表低位,两个拼成一个高精度的数组。不过使用的时候要考虑代表高位的数据四舍五入。


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2011/6/18 11:55:54
ppsca(论坛新手)
ppsca
头衔:社区公民
帮派:无帮无派
帖数:43
金钱:305
积分:41
注册时间:2011/6/8
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

blackfin 是定点处理器,不适合做浮点操作,你可以将要处理的浮点数据乘以一个倍数,如左移10位,等计算完成后再转成小数,这样精度会高很多。用普通的INT型就可以操作。


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2011/6/18 12:08:36
blackfin(论坛游民)
blackfin
头衔:社区公民
帮派:无帮无派
帖数:114
金钱:1105
积分:153
注册时间:2011/6/10
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
如果是这样呢?电脑上位机软件上定义了
    union
    {
        char  data1[4];
        float data2;
    }send;

union send g_send;

g_send.data2 = 3.1415926;
然后通过串口发送data1[4]到DSP的串口上,DSP程序接收到这4个字节后,把其用相同的联合还原为float,这时float data2 = 3.14159;被截短了。发送这种情况时,有没有什么办法呢?

这家伙很懒,什么也没有留下!
等级:论坛游民 参考IP地址:*.*.*.*
2011/6/18 14:50:21
ppsca(论坛新手)
ppsca
头衔:社区公民
帮派:无帮无派
帖数:43
金钱:305
积分:41
注册时间:2011/6/8
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

你可以尝试这样做,可以忽略串口发过来的数据类型,直接用 uchar 数组或指针方式收取全部数据,最后再对数据做处理还原成浮点数据。或者不需要还原直接使用,根据情况而定。

只是猜想,你可以试试。


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2011/6/18 19:14:49
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154062 Call, 1 Queries, Processed in 0.109375 second(s),