Je *_*Rog 18 c floating-point nan
float f = (float)'a';
if(f < 0){
}
else if(f == 0){
}
else if(f > 0){
}
else{
printf("NaN\n");
}
Run Code Online (Sandbox Code Playgroud)
f0如果是a,则不会大于/等于/小于NaN.
但是如何f在第一时间产生这样的?
我尝试了各种方法来制作一个NaN,但没有工作..
Foo*_*Bah 19
要产生纳米,有几种方法:
1)手动生成(读取ieee754以正确设置位)
2)使用宏.GCC公开了一个宏NAN.它在math.h中定义
检查nan的一般方法是检查if (f == f)(对于nan值应该失败)
对于nan,float表示中的指数位应全部设置为1(float由一个有符号位,一组指数位和一组尾数位组成)
Dan*_*ile 17
使用浮点数0.0 / 0.0不是"除以零"错误; 它导致了NaN.
这个C程序打印-nan:
#include <stdio.h>
int main()
{
float x = 0.0 / 0.0;
printf("%f\n", x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
就NaN计算机看起来而言,两个"无效"数字被保留用于"信令"和"安静"NaN(类似于为正无穷大保留的两个无效数字).在维基百科条目有大约NaN被如何表示为IEE浮点数的更多细节.
您可以使用NAN宏,也可以只使用其中一个nan/nanf函数来将nan值分配给变量。
要检查是否要处理nan值,可以使用isnan()。这是一个例子:
#include <stdio.h>
#include <math.h>
int main(void) {
float a = NAN;//using the macro in math.h
float f = nanf("");//using the function version
double d = nan("");//same as above but for doubles!
printf("a = %f\nf = %f\nd = %f\n",a,f,d);
if(isnan(a))
puts("a is a not a number!(NAN)\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
运行上面的代码片段将为您提供以下输出:
a = nan
f = nan
d = nan
a is a not a number!(NAN)
Run Code Online (Sandbox Code Playgroud)
自己运行代码:http : //ideone.com/WWZBl8
阅读更多信息:http : //www.cplusplus.com/reference/cmath/NAN/