LAOXU 发表于 2023-9-6 21:03:37

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

STC32F FPMU 数学函数库, 我相信官方已作了初步测试,作为第三方,我主要在极值方面(近无穷大及无穷大,近0点附近),

抽查测试,并将运算结果,和 KEIL官方编译器之执行结果作对比, 是否一致。

如果不一致,可能使用STC32F FPMU 数学函数库,替代KEIL官方库,会产生意想不到的结果。

LAOXU 发表于 2023-9-6 21:12:20

说明:
xx1;xx2;是输入数据:
xx3 是 KEIL官方库 计算结果。
xx4 是 STC32F FPMU库 计算结果。

1、浮点数加法(+):
   DMAIR = 0x1C;




测试结果近似一致,结论:100分。

LAOXU 发表于 2023-9-6 21:28:25

2、浮点数减法(-):
   DMAIR = 0x1D;





测试结果,近0点附近表现太精确,而 KEIL在近0时,尾数末 3位直接丢弃,不参与,

否则,执行下列程序,可能永远得不到为真(0值):

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

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

结论:80分。 软件打点补丁能用。

LAOXU 发表于 2023-9-6 21:34:26

本帖最后由 LAOXU 于 2023-9-6 21:37 编辑

3、浮点数乘法(*):
   DMAIR = 0x1E;




测试结果,近0点附近表现很精确,比KEIL计算精度高,结论:120分。

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

LAOXU 发表于 2023-9-6 21:39:16

本帖最后由 LAOXU 于 2023-9-8 20:24 编辑

4、浮点数除法(/):
   DMAIR = 0x1F;

测试结果,除0溢出,计算结果正常,结论:100分。

LAOXU 发表于 2023-9-6 21:55:11

本帖最后由 LAOXU 于 2023-9-7 07:07 编辑

5、浮点数开方(sqrt):
   DMAIR = 0x20;

不好意思,两个变量写反了,现更正。





测试结果,近0点(非正规浮点数),keil 计算直接罢工了???

像 keil做乘法,接近0直接取计算值为 0能接受。

但对此数 1.17549421e-0.038 开平方, STC32F FPMU SQRT多开几次, 结果近似为 1(完全正确)。

keil 直接罢工不工作, 不知客户会不会接受?

让我打分:近0点附近表现很精确,远甩 KEIL 直接罢工,结论:150分。

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



LAOXU 发表于 2023-9-6 22:21:02

6、浮点数比较(fpcmp3):
   DMAIR = 0x21;


测试结果,存在问题有 2点:

a. 太精确了,精确的过头,当两数 24位尾数相差 1, 都能精确分辩出正负,如何对计算结果判0(相等)?

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

   当一个 -INF 和 一个标准浮点数 相比较,肯定 -INF 小。

   STC32F FPMU 的浮点数比较, 直接作溢出处理,不作判断, 不区分大小。

   这个软件补丁也没法打,keil 的 fpcmp3,用整数运算,速度不慢。

   如用STC32F FPMU 的浮点数减法代替(再加上近0点软件判断补偿),编写的程序,执行速度不一定比 keil 的 fpcmp3 快`。

这个只有编写后, 测试各自的运行速度, 对比结果才知。


让我打分:60分不会给, 不及格。

LAOXU 发表于 2023-9-8 20:25:31

7、浮点数检测(CHECK):
   DMAIR = 0x22;




测试结果,正非浮点数,计算结果 R7=0x01,不正常。




经反复核查,系说明书有误,结论:100分。

LAOXU 发表于 2023-9-8 20:33:59

本帖最后由 LAOXU 于 2023-9-8 20:47 编辑

8、浮点数正弦(SIN):
   DMAIR = 0x2D;




测试结果,大数据计算精度比 KEIL 高,动态范围比 KEIL 大,最大到 16777215(0x4B7FFFFF),

数据超出此数, STC32F FPMU 的 SIN 不工作了,结论:120分。

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


LAOXU 发表于 2023-9-8 20:35:25

本帖最后由 LAOXU 于 2023-9-8 20:47 编辑

9、浮点数余弦(COS):
   DMAIR = 0x2E;




测试结果,大数据计算精度比 KEIL 高,动态范围比 KEIL 大,最大到 16777215(0x4B7FFFFF),

数据超出此数, STC32F FPMU 的 COS 不工作了,结论:120分。

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

页: [1] 2 3 4
查看完整版本: STC32F FPMU 数学函数库 的功能验证(第三方,力求全面完整)