@jian_yu 发表于 2024-3-28 14:11:20

夭寿啊,STC32G12K128芯片的cos(0)=0

听说STC32G12K128的浮点运算能力很强,最近入手了一块板子,试了下余弦函数,cos(0)居然是一个很接近0的数,这个是在单片机连接电脑开keil的USB仿真看到的,但如果用串口导出数据也是一样的结果,引用的头文件是直接右键插入的,但是开平方都能精准的运算,求大佬帮助

社区闲人 发表于 2024-3-28 14:34:50

这是KEIL的锅,STC表示---->不背。
STC32F系列才有FPU。

社区闲人 发表于 2024-3-28 14:41:50

这事你得问论坛里的杨老师(杨为民),他对KEIL的C51/C251研究很深。

社区闲人 发表于 2024-3-28 14:49:39

另外,KEIL C251不支持double类型,你用float试试。

社区闲人 发表于 2024-3-28 14:58:44

在keil c251上测试了下



bbb == 1---->正确!

御坂美琴我老婆 发表于 2024-3-28 15:17:02

32G没有浮点,32F才有

lezjin 发表于 2024-3-28 16:02:11

长知识了

jwd 发表于 2024-3-28 16:30:24

你这是要做巧妇啊{:4_165:}

杨为民 发表于 2024-3-28 19:19:50

本帖最后由 杨为民 于 2024-3-28 19:24 编辑

社区闲人 发表于 2024-3-28 14:58
在keil c251上测试了下



正解。正确使用语法,是得到正确结果的前提。
如果你定义了变量,Keil会根据变量的类型转换数据类型再调用函数进行计算。
原问题写了个“0”,这是什么数据类型呢?Keil不知道,因此就“猜”了一个,结果自然不一定符合编程者的期望了。

xiangzichen 发表于 2024-3-28 23:41:22

杨为民 发表于 2024-3-28 19:19
正解。正确使用语法,是得到正确结果的前提。
如果你定义了变量,Keil会根据变量的类型转换数据类型再调用 ...
对,C51有时候就是乱七八糟,记得以前有个项目,做了个移位,1<<xx,这个1之前直接写的,也没有太注意,软件怎么调试都不行,不小心看到了,改成(u8)1<<xx,立马解决问题.
后来也没有具体测试,莫非C51默认1是bit吗?
所以,C写东西确实需要严谨一点.
页: [1] 2
查看完整版本: 夭寿啊,STC32G12K128芯片的cos(0)=0