在为我的类编写代码时,我设法用Python创建了一个工作示例,它遵循了我的教授为我们提出的所有要求。但当我把它翻译成C语言交给我的教授时,我发现了几个问题,我以为我设法绕开了,但结果我错了。在
我发现的一个问题是,在Python中,我使用以下代码来确定平方根是否为自然数。在
if (math.sqrt(a**2+b**2)%2)==1 or (math.sqrt(a**2+b**2)%2)==0:
当我用C语言翻译时,我发现我在编译代码时收到了错误消息,说我试图用整数和其他很多东西来对浮点进行模运算。在
我在C中做了一些测试,以了解根周围的环境,发现如果根是自然数,则指定为float或double的变量返回0。在
^{pr2}$但是如果我试图在if语句中调用r_float_a,无论a的值是多少,它都将返回false:
#include<stdio.h>
#include<math.h>
int main()
{
float r_float_a, r_float_b;
int a=16,b=15,r_int_a,r_int_b;
r_float_a=sqrt(a);
r_float_b=sqrt(b);
r_int_a=sqrt(a);
r_int_b=sqrt(b);
printf("%d\n",r_float_a);
printf("%d\n",r_float_b);
if (r_float_a==0)
{
printf("%d\n",r_int_a);
}
else
{
printf("%d\n",r_int_b);
}
}
我怎样才能修正这个问题来检查一个数的平方根是否是一个自然数?在
对于大的
float
,OP和Weather Vane方法失败。float
通常有6到8个十进制数字的精度。对于大于1e14
的数字,保存为float
的sqrt()
将始终是一个整数-可以完全转换为整数(如果在整数范围内)。在要确定
float x
是否是另一个整数的正平方:x
是否为阴性,INF或NaN,病理病例不合格。在modff()
提取小数部分,如果不是0.0,则失败。在fmodf()
提取尾数/有效位和指数。检查指数。在float
位宽度-改革x
和然后应用@Weather Vane测试的偶数幂。在显然,如果数字的平方根是一个自然(整数)数,那么数字本身也是。在
我使用
unsigned
,因为自然数是一个完整的非负数。因此,signed
数的使用超出了这个问题的范围。平方根可以是负数,但那不是自然数。负数的平方根进入复数域。在相关问题 更多 >
编程相关推荐