Учитывая целое число (2^n), которое является степенью 2, я хочу узнать значение n, значение индекса, используя логарифм. Формула для поиска индекса: log (число)/log (2). Ниже приведен фрагмент кода:Учитывая 2^n, найдите n, используя логарифм
unsigned long int a;
double apower;
apower = log((double)a)/log((double)2);
Я обнаружил, что значение «apower» неправильно на каком-то большом значении а, я не знаю значение, так как мой код не удается, после отправки его. Почему это так? Есть ли какая-то проблема с кастингами?
Ниже весь фрагмент кода:
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);
Значения а и Ь всегда будет сила 2. Так apower и bpower должны иметь 00 в знаков после запятой. Поэтому значение count будет равно int (% d). Я просто хочу знать поведение Логарифма.
почему вы используете 'неподписанных долгое INT 'for' a', если вы производите его «двойным»? Это не имеет никакого смысла ... – Nidhoegger
Что такое sizeof (long) на вашей платформе? –
ive написал небольшую пробную программу, используя ваш код. он работает до тех пор, пока 'n' не станет большим для' unsigned long int', когда слишком велико, результатом будет '-inf', что является правильным поведением. Поэтому, пожалуйста, предоставьте дополнительную информацию о своей домашней работе ... извините ... ваша проблема ... – Nidhoegger