Hi,
ich möchte gerne prüfen ob x in der Formel a^x=b eine ganzzahl ist. a und b sind bekannt.
dazu habe ich nach x umgestellt: x = log10(b) / log10(a)
um jetzt zu prüfen ob x eine ganze Zahl ist, habe ich die floor() Funktion verwendet.
bei a=8 und b=512 sollte mein Programm eigentlich 1 ausgeben, tut es aber nicht.
#include <stdio.h>
#include <math.h>
int is_integer(int, int);
int main(void)
{
printf("%d\n",is_integer(512,8));
return 0;
}
/* a^x=b , is x integer? */
int is_integer(int a, int digit_sum_a)
{
double x = log10(a)/log10(digit_sum_a);
printf("x=%lf floor(x)=%lf\n",x,floor(x));
printf("x-floor(x)=%lf\n",x-floor(x));
if (x-floor(x)==0)
{
return 1;
}
else
{
return 0;
}
}
hier die Ausgabe:
x=3.000000 floor(x)=3.000000
x-floor(x)=0.000000
0
das muss ja an dem if-Block liegen. Kann es sein das das Problem ist, dass x-floor(x) kein int ist und es mit 0 verglichen wird?
In anderen Programmen hat das aber bis lang immer so funktioniert.
Wie kann man noch prüfen ob x ganzzahlig ist?