Dado 2 ^ n, encuentra n usando el logaritmo

Dado un número entero (2 ^ n) que es potencia de 2, quiero averiguar n, el valor del índice usando el logaritmo. La fórmula para encontrar el índice es: log (número) / log (2). El siguiente es el fragmento de código:

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

Descubrí que el valor de 'apower' está mal en algún valor grande de a, no sé el valor, ya que mi código falla, después de enviarlo. ¿Por que es esto entonces? ¿Hay algún problema de casting?

El siguiente es el fragmento completo:

  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);

Los valores de a y b siempre serán una potencia de 2. Por lo tanto, una potencia y una potencia de b deben tener 00 en decimales. Por eso, el valor de count será int (% d). Solo quiero saber el comportamiento del logaritmo.

Respuestas a la pregunta(3)

Su respuesta a la pregunta