三个浮点数相加不能用吗?a+a+a不行,a+a可以。

2019-10-15 22:05发布

我在用浮点数,只是个简单的相加或是printf,现在看float a = 1.234;

float b;
b = a+a;
printf("%f",b);
这个是可以的。

但是一旦出现b=a+a+a;或是printf("%f,%d,%d",a,b,c);之类的就不行,因为它是连加或连输出了3个。重点是大于3个就不行了,输出也不对了,算了算不了了。。。为啥呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
yuzeyuan1
1楼-- · 2019-10-16 13:54
密耳 发表于 2016-12-23 17:28
强制转换

这几天试了些,a = sin(PI/4) + cos(PI/4) + tan(PI/4) 这三个在一个式子里相加是不行的,但是强制转换成a =(float32_t) sin(PI/4) + (float32_t) cos(PI/4) + (float32_t) tan(PI/4) 就可以了。为什么呢?本身sin不就是支持输出浮点型吗?而且试了一下,a = (float32_t)b + (float32_t)c + (float32_t)也是可以的,但是b c d 本身就是float32_t型的,为什么非要强转一次呢?
printf还是只能打印一个或俩,强转也不行。
yuzeyuan1
2楼-- · 2019-10-16 16:54
对了,以上这些个问题应该是和arm_math.h这个库有关,不用它就没事。用math.h没问题。
本想用arm_math.h内部的矩阵运算的,但是矩阵运算精度似乎只能到小数点后7位,不能满足我的精度要求,没办法用。
电脑小白
3楼-- · 2019-10-16 18:08
printf输出多个参数的时候有时候确实很奇怪。估计是编译器的问题。你如果用的是keil的话,那么建议你卸载然后重装下keil试试看。
电脑小白
4楼-- · 2019-10-16 23:00
 精彩回答 2  元偷偷看……
yuzeyuan1
5楼-- · 2019-10-17 03:06
电脑小白 发表于 2016-12-26 10:53
我一般都是用的math.h 这个头文件。

应该就是arm_math.h的问题,精度只有32位float,而我所有变量都定义成了double ,所以不管是运算还是输出都挂了。

一周热门 更多>