• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

单片机处理浮点数据

Argent 2019-05-17 浏览量:1501
在51单片机C语言程序如何保存运算过程中的小数位?
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
所有亮答 数量:7
  • 很多这些单片机是不具有浮点型运算能力的,如果想计算小数就必须经过编译器优化,这样会占据大量的CPU时间,所以,遇到小数的时候尽量放大一定倍数然后再运算,避免因为运算时间问题导致奇怪的现象

  • 用float或者double变量保存数据,缩写把数据放大保存,比如1.2放大十倍,保存的时候是12,需要的时候再除10

  • 想保留小数点必须用double或float型数据,还有两个整形数据相除会自动舍去小数,

    解决方法改变类型或者加个强制类型转化

  • 使用浮点型float或双浮点double来计算就有小数部分,不带DSP功能的单片机,浮点相乘一般会需要多个机器周期,51一般在200个机器周期左右

  • 51中float在存储其中占4字节,想要无损保存需要转换为字节序列保存,使用时在按字节序列读取。

    float a;

    char *p;

    p=(char *)&a;

    eep_save(addr  p len);   //保存示例

    eep_read(addr p len);    //读取示例


  • 这种不能支持浮点运算的,它就会将这个浮点运算转化为定点运算,就是先乘上一定倍数,使之成为定点,计算,之后再除回一定数

    如果硬件本身支持浮点运算的,就是带了FPU的,它会用FPU直接处理浮点运算

  • 51单片机可以使用float或者double类型来保存浮点型的数据,

    但是51单片的战斗力太弱,一个浮点计算要浪费好长时间,建议根据需要将数据放大十倍百倍,最好能够直接全部变成整数,然后计算的时候,注意一下放大的倍数一直就行了,如果输出的话,在转换成浮点数输出就行了。

    若果浮点计算少的话,用51还行,如果计算多的话,建议使用带有硬件浮点运算的控制器。

相关问题

问题达人换一批

单片机处理浮点数据