STC32F FPMU 数学函数库 的功能验证(第三方,力求全面完整)
STC32F FPMU 数学函数库, 我相信官方已作了初步测试,作为第三方,我主要在极值方面(近无穷大及无穷大,近0点附近),抽查测试,并将运算结果,和 KEIL官方编译器之执行结果作对比, 是否一致。
如果不一致,可能使用STC32F FPMU 数学函数库,替代KEIL官方库,会产生意想不到的结果。
说明:
xx1;xx2;是输入数据:
xx3 是 KEIL官方库 计算结果。
xx4 是 STC32F FPMU库 计算结果。
1、浮点数加法(+):
DMAIR = 0x1C;
测试结果近似一致,结论:100分。
2、浮点数减法(-):
DMAIR = 0x1D;
测试结果,近0点附近表现太精确,而 KEIL在近0时,尾数末 3位直接丢弃,不参与,
否则,执行下列程序,可能永远得不到为真(0值):
if!(float1-float2)
{ ....
}
如在近0点,计算太精确了,程序执行结果,大概率是错误。
结论:80分。 软件打点补丁能用。
本帖最后由 LAOXU 于 2023-9-6 21:37 编辑
3、浮点数乘法(*):
DMAIR = 0x1E;
测试结果,近0点附近表现很精确,比KEIL计算精度高,结论:120分。
注:增加的 20分,是表现超 KEIL的额外奖励分。
本帖最后由 LAOXU 于 2023-9-8 20:24 编辑
4、浮点数除法(/):
DMAIR = 0x1F;
测试结果,除0溢出,计算结果正常,结论:100分。 本帖最后由 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的额外奖励分。
6、浮点数比较(fpcmp3):
DMAIR = 0x21;
测试结果,存在问题有 2点:
a. 太精确了,精确的过头,当两数 24位尾数相差 1, 都能精确分辩出正负,如何对计算结果判0(相等)?
b. 无法对无穷大判断,当一个 +INF 和 一个标准浮点数 相比较,肯定 +INF 大。
当一个 -INF 和 一个标准浮点数 相比较,肯定 -INF 小。
STC32F FPMU 的浮点数比较, 直接作溢出处理,不作判断, 不区分大小。
这个软件补丁也没法打,keil 的 fpcmp3,用整数运算,速度不慢。
如用STC32F FPMU 的浮点数减法代替(再加上近0点软件判断补偿),编写的程序,执行速度不一定比 keil 的 fpcmp3 快`。
这个只有编写后, 测试各自的运行速度, 对比结果才知。
让我打分:60分不会给, 不及格。
7、浮点数检测(CHECK):
DMAIR = 0x22;
测试结果,正非浮点数,计算结果 R7=0x01,不正常。
经反复核查,系说明书有误,结论:100分。
本帖最后由 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:47 编辑
9、浮点数余弦(COS):
DMAIR = 0x2E;
测试结果,大数据计算精度比 KEIL 高,动态范围比 KEIL 大,最大到 16777215(0x4B7FFFFF),
数据超出此数, STC32F FPMU 的 COS 不工作了,结论:120分。
注:增加的 20分,是表现超 KEIL的额外奖励分。