标题: C语言asin()函数返回值的问题 [打印本页]

作者: TLHZP    时间: 2021-11-29 12:43
标题: C语言asin()函数返回值的问题
asin()函数是math库中的反正弦函数,要求输入值在-1到1范围内。在51单片机,Keil c中,如果输入值超出这个范围,例如输入值为1.1,返回值是多少呢?代码如下
fdt=asin(1.1);
fdt为float变量,在内存中占四个字节,执行上面的代码后,fdt所在的四个字节会是什么值?
谢谢解答
作者: 188610329    时间: 2021-11-29 14:55
keil 里写好代码,直接跑一下, 读一下fdt的 值不就知道了? 发帖到现在,结果早就出来了……
作者: npn    时间: 2021-11-29 16:40
用 union 结构将 float 和 unsigned char [4] 数组联合起来,就可以读写具体字节值。
作者: TLHZP    时间: 2021-11-29 17:00
188610329 发表于 2021-11-29 14:55
keil 里写好代码,直接跑一下, 读一下fdt的 值不就知道了? 发帖到现在,结果早就出来了……

下载器坏了
作者: 188610329    时间: 2021-11-29 17:25
TLHZP 发表于 2021-11-29 17:00
下载器坏了

不需要下载,就在KEIL里面 CTRL + F5 不就可以了?
作者: Hephaestus    时间: 2021-11-29 21:47
mingw算asin(1.1)返回了#IND, indeterminate
作者: 黄youhui    时间: 2021-11-30 08:42
TLHZP 发表于 2021-11-29 17:00
下载器坏了

软件仿真啊
作者: glinfei    时间: 2021-11-30 14:47
返回值 NAN ( No A Number),C 值域错误都是返回这个的,还会设置 errno 和 FE_INVALID,不过Keil 我没试过。
作者: Hephaestus    时间: 2021-11-30 16:10
glinfei 发表于 2021-11-30 14:47
返回值 NAN ( No A Number),C 值域错误都是返回这个的,还会设置 errno 和 FE_INVALID,不过Keil 我没试 ...

实测返回的是IND,错误的严重程度比NAN轻微一些。
作者: glinfei    时间: 2021-11-30 16:46
Hephaestus 发表于 2021-11-30 16:10
实测返回的是IND,错误的严重程度比NAN轻微一些。

Windows将NAN显示为.#IND,表示”indeterminate",而Linux显示为nan,#INF才是比NAN轻微。
作者: Hephaestus    时间: 2021-12-2 17:47
glinfei 发表于 2021-11-30 16:46
Windows将NAN显示为.#IND,表示”indeterminate",而Linux显示为nan,#INF才是比NAN轻微。

我已经说了我的编译器是mingw,你查查这个编译器是干什么的再说什么Windows、Linux。
作者: glinfei    时间: 2021-12-3 09:09
Hephaestus 发表于 2021-12-2 17:47
我已经说了我的编译器是mingw,你查查这个编译器是干什么的再说什么Windows、Linux。

我认为虽然是编译器看到的数字,但实质是操作系统返回的,所以同样的编译器在不同操作系统返回值不一样,但各个编译器在WIN返回都一样。不过很久不用dos了,忘记这个系统返回值是多少。
作者: Hephaestus    时间: 2021-12-3 15:35
glinfei 发表于 2021-12-3 09:09
我认为虽然是编译器看到的数字,但实质是操作系统返回的,所以同样的编译器在不同操作系统返回值不一样, ...

MinGW跟DOS有一毛钱的关系吗?
作者: 乐水    时间: 2021-12-3 17:04
如果 x 的取值超出范围,那么 asin() 将发生域错误,此时返回值为 NaN。 NaN的定义见math头文件,.




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1