Given 2 ^ n, finde n mit dem Logarithmus

Gegeben eine ganze Zahl (2 ^ n), die Potenz von 2 ist, möchte ich n, den Indexwert mit Logarithmus herausfinden. Die Formel zum Finden des Index lautet: log (Nummer) / log (2). Es folgt das Code-Snippet:

  unsigned long int a;
  double apower;
  apower = log((double)a) / log((double)2);

Ich habe festgestellt, dass der Wert von 'apower' bei einem großen Wert von a falsch ist. Ich kenne den Wert nicht, da mein Code nach dem Senden fehlschlägt. Wieso ist es so? Gibt es ein Casting-Problem?

Folgend ist das gesamte Snippet:

  int count = 0;
  unsigned long int a,b;
  double apower,bpower;
  apower = log((double)a) / log((double)2);
  bpower = log((double)b) / log((double)2);
  count = abs(apower - bpower);
  printf("%d\n",count);

Werte von a und b sind immer Potenzen von 2. Daher müssen apower und bpower 00 in Dezimalstellen haben. Deshalb ist der Wert von count int (% d). Ich möchte nur das Verhalten des Logarithmus kennen.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage