При написании кода для моего класса мне удалось создать рабочий пример в Python, который соответствует всем требованиям, которые мой профессор намеревался достичь. Но когда я переводил его на C, чтобы передать его своему профессору, я нашел несколько проблем, которые, как я думал, мне удалось обойти, но оказалось, что я ошибался.Проблемы с sqrt() в 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, если корень является натуральным числом.
#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);
printf("%d\n",r_int_a);
printf("%d\n",r_int_b);
}
Но если бы я попытался крикнуть r_float_a в случае заявление он всегда будет возвращать ложные независимо от величины а:
#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);
}
}
Как я могу это исправить, чтобы быть в состоянии проверить если квадратный корень из числа является натуральным числом?
Используйте '% f' для печати поплавков и пар. –