找回密码
 立即注册
楼主: LAOXU

STC32F FPMU 数学函数库 的功能验证(第三方,力求全面完整)

[复制链接]

50

主题

1219

回帖

5513

积分

荣誉版主

积分
5513
 楼主| 发表于 2023-9-8 20:43:11 | 显示全部楼层
本帖最后由 LAOXU 于 2023-9-8 20:47 编辑

10、浮点数正切(TAN):
   DMAIR = 0x2F;

FLOAT_TAN.JPG


测试结果,

a. 近 PI/2 附近表现很精确,比KEIL计算精度高,+20分。


FLOAT_TAN_X4.JPG



b. 大数据计算精度比 KEIL 高,动态范围比 KEIL 大,最大到 16777215(0x4B7FFFFF),

数据超出此数, STC32F FPMU 的 TAN 不工作了,+20分。

结论:140分。

注:增加的 40分,是表现超 KEIL的额外奖励分。


回复

使用道具 举报 送花

50

主题

1219

回帖

5513

积分

荣誉版主

积分
5513
 楼主| 发表于 2023-9-8 20:48:24 | 显示全部楼层

11、浮点数反正切(ATAN):
   DMAIR = 0x30;

测试结果,计算结果正常,结论:100分。

回复

使用道具 举报 送花

50

主题

1219

回帖

5513

积分

荣誉版主

积分
5513
 楼主| 发表于 2023-9-8 20:59:19 | 显示全部楼层
12、浮点数转 8位整数(float-->char):
   DMAIR = 0x23;

未测试,KEIL 用不到。
回复

使用道具 举报 送花

50

主题

1219

回帖

5513

积分

荣誉版主

积分
5513
 楼主| 发表于 2023-9-8 20:59:28 | 显示全部楼层
本帖最后由 LAOXU 于 2023-9-8 21:28 编辑

13、浮点数转 16位整数(float-->int):
   DMAIR = 0x24;

未测试,KEIL 用不到。
回复

使用道具 举报 送花

50

主题

1219

回帖

5513

积分

荣誉版主

积分
5513
 楼主| 发表于 2023-9-8 21:27:47 | 显示全部楼层
14、浮点数转 32位整数(float-->long):
   DMAIR = 0x25;

测试结果,计算结果正常,

在数据溢出时,两者表现都不正常, KEIL 正溢出显示负数, 负溢出显示正数,

而 STC32F FPMU , 无论正溢出还是负溢出, 都显示负数, 当然, 这个结果并不重要。

FLOAT_1.JPG          FLOAT_11.JPG



结论:100分。



回复

使用道具 举报 送花

50

主题

1219

回帖

5513

积分

荣誉版主

积分
5513
 楼主| 发表于 2023-9-8 21:38:02 | 显示全部楼层
本帖最后由 LAOXU 于 2023-9-8 21:42 编辑

15、8位整数 转 浮点数(char-->float):
   DMAIR = 0x27;


STC32F FPMU 的这个单元, 是 8位有符号整数 转 浮点数(char-->float),

而 KEIL 的这个单元, 是 8位无符号整数(含8位有符号整数) 转 浮点数(uchar 或 char -->float),
  
本单元,KEIL 用不到, 未测试。
回复

使用道具 举报 送花

79

主题

1108

回帖

4966

积分

荣誉版主

积分
4966
发表于 2023-9-9 13:16:49 | 显示全部楼层
本帖最后由 杨为民 于 2023-9-9 13:36 编辑
LAO*** 发表于 2023-9-6 21:28
2、浮点数减法(-):
   DMAIR = 0x1D;
“否则,执行下列程序,可能永远得不到为真(0值):

  if  !(float1-float2)
    { ....
    }

如在近0点,计算太精确了,程序执行结果,大概率是错误。”



楼主这结论真是无知无畏,妄下结论!
下面是百度上查的关于:
浮点数比较大小.jpg

看来楼主的动手编程能力有待提高

回复

使用道具 举报 送花

79

主题

1108

回帖

4966

积分

荣誉版主

积分
4966
发表于 2023-9-9 13:34:19 | 显示全部楼层
LAO*** 发表于 2023-9-6 22:21
6、浮点数比较(fpcmp3):
   DMAIR = 0x21;

“b. 无法对无穷大判断,当一个 +INF 和 一个标准浮点数 相比较,肯定 +INF 大”


正规的编译器函数库在对浮点数进行比较前,都会先对浮点数的格式进行检测(也就是STC FPU的浮点数检测功能存在的必要性),然后只对两个规范浮点数进行比较并给出结果。C语言中对于IEEE非规范浮点数进行比较的结果并没有规定,属于“异常”,通常都以给出非规范数的方式给出结果,然后由编译器或者操作系统进行处理。
楼主用非规范浮点数来打分,真是“无知无畏,妄下结论!”
回复

使用道具 举报 送花

50

主题

1219

回帖

5513

积分

荣誉版主

积分
5513
 楼主| 发表于 2023-9-9 17:13:36 | 显示全部楼层
杨*** 发表于 2023-9-9 13:16
“否则,执行下列程序,可能永远得不到为真(0值):

  if  !(float1-float2)

大道理谁都会查,既然 STC 要蹭KEIL,那么应该力求和 KEIL 向上兼容!

哪怕 KEIL 的方法是非标非主流的,也应该向她靠拢。

KEIL 的浮点数减法比较,其差的值,将最后 3位BIT清0,如此时为0,则认为相等。

你STC的精度再高再精确,在KEIL 上不适用,除非你不蹭KEIL。

用STC的高精度,运行原 KEIL的 浮点数减法比较,可能会得不到相等的结果。

给用户的体验就是,原来程序好好的,运行一切正常,但用了你的库,结果运行不正常了。

无论你的东西再先进再精确,用户的体验能好吗?
回复

使用道具 举报 送花

50

主题

1219

回帖

5513

积分

荣誉版主

积分
5513
 楼主| 发表于 2023-9-9 17:28:21 | 显示全部楼层
杨*** 发表于 2023-9-9 13:34
“b. 无法对无穷大判断,当一个 +INF 和 一个标准浮点数 相比较,肯定 +INF 大”

非常抱歉,KEIL在对浮点数进行比较前,并不对浮点数的格式进行检测(KEIL在浮点数赋值、转换、运算后,

都会对浮点数进行规格化,以确保浮点数的格式正确)。

比较后直接给出两个标志( CY 和 Z ),供 大小 及 等于 等判断。

KEIL的编译器,为适应单片机小系统,有些地方和标准C不同的,属于你眼中的非标。

但无论 KEIL的编译器,是正标还是非标,哪怕存在一些非主流的,你必须适应她,向她靠拢,按照她的非标准来,

除非你不想蹭KEIL。
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-11-7 14:37 , Processed in 0.071930 second(s), 81 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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