为什么我们不能将operator%用于float和double类型的操作数?
我是C / C ++的新手,所以我对基本类型有几个问题:
-
我在某处读过运算符%不能应用于float或double类型的操作数。 那我怎样才能检查float或double类型变量的可分性? 我在下面显示了我的程序错误:
#include int main() { double n,k,t,i; int j=0; scanf("%f %f",&n,&k); i=0; while(i<n) { scanf("%f",&t); if(t%k==0) /* error:invalid operands to binary % */ j++; i++; } printf("%d",j); return 0; }
-
如果正整数的范围最大为10 ^ 9,我应该使用哪个限定符或如何实现如此大的范围?
这是fmod
答案的替代方案 – 它回答了您最初提出的问题(因为您使用的是double
类型。如果从您的注释中可以清楚地看到,您实际上只想使用整数类型,则可以按如下方式重写代码(使用unsigned long long int
类型为您提供足够的空间):
#include int main() { unsigned long long int n, k, t, i, j=0; printf("enter the number of attempts: "); scanf("%llu", &n); printf("\nEnter the factor: "); scanf("%llu", &k); i=0; while(i
注意我试图使I / O更具描述性 - 提示用户是一个好主意,而不是只是让一个闪烁的光标等待他。 显然我在猜测一下(甚至可能不是你想要使用的语言......)
那么我该如何检查float或double类型变量的可分性。 ??`
使用fmod
。 %
仅适用于整数操作数。 %
不适用于浮点值,因为C已经提供了fmod
库函数。
一个。 如果你想让它保持浮点状态,可以使用
的fmod
函数(C ++中的
中的std::fmod
)。
湾 int
范围是依赖于实现的(尽管标准定义了一个最小范围,IIRC,应该是+ -32767,尽管在典型的机器上它将是-2147483648 – 2147483647)。 如果整数在int
范围内,则不必执行任何特定操作 – 如果int
适合其范围,则会自动为int
没有后缀的整数文字。 另一方面,较大的整数文字可能需要long
或long long
存储以避免溢出。
使用函数fmod及其系列。
-
%
不能用于浮标,因为标准是这样说的。 使用fmod
。 好的没关系,实际的原因是“余数”的概念只对整数除法有意义。fmod
做的是为两个浮点参数生成一个整数商:float my_fmod(float a, float b) { int quot = (int) a/b; return a - (quot * b); }
-
如果需要整数的特定范围,请不要将
int
与限定符一起使用,因为它们是特定于实现的。 使用像uint32_t
这样的固定宽度类型。