LAOXU
发表于 2023-9-8 20:43:11
本帖最后由 LAOXU 于 2023-9-8 20:47 编辑
10、浮点数正切(TAN):
DMAIR = 0x2F;
测试结果,
a. 近 PI/2 附近表现很精确,比KEIL计算精度高,+20分。
b. 大数据计算精度比 KEIL 高,动态范围比 KEIL 大,最大到 16777215(0x4B7FFFFF),
数据超出此数, STC32F FPMU 的 TAN 不工作了,+20分。
结论:140分。
注:增加的 40分,是表现超 KEIL的额外奖励分。
LAOXU
发表于 2023-9-8 20:48:24
11、浮点数反正切(ATAN):
DMAIR = 0x30;
测试结果,计算结果正常,结论:100分。
LAOXU
发表于 2023-9-8 20:59:19
12、浮点数转 8位整数(float-->char):
DMAIR = 0x23;
未测试,KEIL 用不到。
LAOXU
发表于 2023-9-8 20:59:28
本帖最后由 LAOXU 于 2023-9-8 21:28 编辑
13、浮点数转 16位整数(float-->int):
DMAIR = 0x24;
未测试,KEIL 用不到。
LAOXU
发表于 2023-9-8 21:27:47
14、浮点数转 32位整数(float-->long):
DMAIR = 0x25;
测试结果,计算结果正常,
在数据溢出时,两者表现都不正常, KEIL 正溢出显示负数, 负溢出显示正数,
而 STC32F FPMU , 无论正溢出还是负溢出, 都显示负数, 当然, 这个结果并不重要。
结论:100分。
LAOXU
发表于 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 用不到, 未测试。
杨为民
发表于 2023-9-9 13:16:49
本帖最后由 杨为民 于 2023-9-9 13:36 编辑
LAOXU 发表于 2023-9-6 21:28
2、浮点数减法(-):
DMAIR = 0x1D;
“否则,执行下列程序,可能永远得不到为真(0值):
if!(float1-float2)
{ ....
}
如在近0点,计算太精确了,程序执行结果,大概率是错误。”
楼主这结论真是无知无畏,妄下结论!
下面是百度上查的关于:
看来楼主的动手编程能力有待提高
杨为民
发表于 2023-9-9 13:34:19
LAOXU 发表于 2023-9-6 22:21
6、浮点数比较(fpcmp3):
DMAIR = 0x21;
“b. 无法对无穷大判断,当一个 +INF 和 一个标准浮点数 相比较,肯定 +INF 大”
正规的编译器函数库在对浮点数进行比较前,都会先对浮点数的格式进行检测(也就是STC FPU的浮点数检测功能存在的必要性),然后只对两个规范浮点数进行比较并给出结果。C语言中对于IEEE非规范浮点数进行比较的结果并没有规定,属于“异常”,通常都以给出非规范数的方式给出结果,然后由编译器或者操作系统进行处理。
楼主用非规范浮点数来打分,真是“无知无畏,妄下结论!”
LAOXU
发表于 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的 浮点数减法比较,可能会得不到相等的结果。
给用户的体验就是,原来程序好好的,运行一切正常,但用了你的库,结果运行不正常了。
无论你的东西再先进再精确,用户的体验能好吗?
LAOXU
发表于 2023-9-9 17:28:21
杨为民 发表于 2023-9-9 13:34
“b. 无法对无穷大判断,当一个 +INF 和 一个标准浮点数 相比较,肯定 +INF 大”
非常抱歉,KEIL在对浮点数进行比较前,并不对浮点数的格式进行检测(KEIL在浮点数赋值、转换、运算后,
都会对浮点数进行规格化,以确保浮点数的格式正确)。
比较后直接给出两个标志( CY 和 Z ),供 大小 及 等于 等判断。
KEIL的编译器,为适应单片机小系统,有些地方和标准C不同的,属于你眼中的非标。
但无论 KEIL的编译器,是正标还是非标,哪怕存在一些非主流的,你必须适应她,向她靠拢,按照她的非标准来,
除非你不想蹭KEIL。