首页 > 试题广场 >

下列关于bool,int,float,指针类型的变量a 与“

[不定项选择题]
下列关于bool,int,float,指针类型的变量a 与“零”的比较语句正确的有?
  • bool : if(!a)
  • int : if(a == 0)
  • float: if(a == 0.0)
  • 指针: if(a == nullptr)
推荐

答案:

BOOL : if ( !a ) or if(a)

int : if ( a == 0)

float : const EXPRESSION EXP = 0.000001

if ( a < EXP && a >-EXP)

pointer : if ( a != NULL) or if(a == NULL)

编辑于 2015-01-27 20:40:09 回复(1)
由于计算机二进制表示浮点数有精度的问题,0.0(浮点double)实际上不是0,而是非常接近零的小数,所以C错!
在ANSIC C中定义了FLT_EPSILON/DBL_EPSILON/LDBL_EPSILON来用于浮点数与零的比较,一般if(fabs(a)<FLT_EPSILON)或if(fabs(a)< DBL_EPSILON)就可以表示a是否“为0”。而if(a==0.0)是永远不会成立的,达不到要求!

编辑于 2015-04-22 13:56:36 回复(3)
浮点数精度问题,不要用对浮点数进行等于和不等于的判断,那样得不到正确结果
发表于 2019-02-22 09:26:44 回复(0)
nullptr 是C++11里的空指针
发表于 2018-03-22 10:38:32 回复(0)
由于计算机表示数的精度有问题,所以实际上0.0不是0,而是非常接近0的小数。
发表于 2020-08-19 09:25:17 回复(0)
`nullptr` 不等于 0。 
`nullptr` 是 C++11 引入的空指针常量,用于表示一个不指向任何对象或函数的指针。它是一种特殊的空指针值,与整数 0 是不同的。在 C++ 中,将整数 0 分配给指针时,会发生隐式类型转换,将其解释为空指针。
例如,以下代码中的两个指针是等价的:
int* ptr1 = nullptr;
int* ptr2 = 0;
`float` 类型可以进行比较,但需要注意浮点数的精度问题。
在 C++ 中,两个 `float` 类型的值之间可以进行比较运算符(如 `<`, `>`, `<=`, `>=`, `==`, `!=`)的比较操作。然而,由于浮点数的存储方式和计算方法的特性,可能存在精度损失和舍入误差。因此,在比较两个浮点数时,应当非常小心,并考虑到可能出现的误差。
通常情况下,推荐使用浮点数之间的范围比较而不是直接相等性比较,例如比较两个浮点数的差的绝对值是否小于某个阈值(例如 1e-6)来判断它们是否接近相等。这种方式可以避免由于精度问题引起的错误比较结果。
发表于 2023-09-25 20:57:21 回复(0)
float temp=0;
 if (temp==0.0)
 {
  cout<<"正确"<<endl;
 }
 else
  cout<<"错误"<<endl;
发表于 2015-08-31 22:20:10 回复(7)
浮点数精度问题,不要用对浮点数进行等于和不等于的判断,那样得不到正确结果
发表于 2021-11-15 16:32:24 回复(0)
float应该与0.00001做比较,0.0还是0
发表于 2021-04-13 21:41:12 回复(0)
发表于 2019-07-28 15:55:36 回复(0)
看了评论想起来了,IEEE 表示的浮点数,有一个隐藏的数1
发表于 2023-02-05 19:38:05 回复(0)
C是精度问题
发表于 2020-12-15 18:14:54 回复(0)
于计算机二进制表示浮点数有精度的问题,0.0(浮点double)实际上不是0,而是非常接近零的小数,所以C错
发表于 2023-10-21 11:10:46 回复(0)
虽然编译器是这样但是也是学到了0.0是一个无限趋近0的小数
发表于 2021-10-11 09:55:49 回复(0)
这题目不说清楚吗,我TM以为比较的是值,你这个0有地址含义
发表于 2021-07-12 00:11:08 回复(0)
C选项是精度问题,如果要比较应该用绝对值
发表于 2020-11-20 22:09:25 回复(0)
C错误的愿意不是a是不是0.0,因为即便a不是0.0但是也可以和0.0比,它错误是因为精度问题
发表于 2020-07-02 16:40:24 回复(0)
由于 float 类型浮点数的精度问题,float 尾数的位数决定float 精度的有效位数为 7位,所以0.0不能表示 float为0的数。
发表于 2020-03-27 08:05:44 回复(0)
浮点精度问题不是不对float/double使用“==”的理由。“==”对于浮点数来说是exact equality,而其它所谓正确的方法应该叫“近似相等”。
发表于 2019-09-09 10:51:04 回复(0)
指针的值要么为空不指向任何地址即0,要么为某个地址值指向某个变量,因此指针可与0正常比较。
发表于 2017-10-01 17:45:15 回复(0)
nullptr是什么,不应该是null吗
发表于 2017-07-31 15:23:50 回复(2)