, пожалуйста, помогите мне в кодировании. Я хочу сделать такую программу. жаль плохой английский.N = 2^x, напишите true, если true. Почему это неправильно?
Учитывая вход:
N
where N is an integer.
возвращение:
True if N = 2^x, where x is an integer.
Я пытался это сделать, но он не работает, как я хочу.
using namespace std;
int main()
{
float a,b,c;
cin>>a;
c=log10(a)/log10(2.0);
b=pow(2,c);
if(b==a)
{
cout<<"TRUE"<<endl;}
else
cout<<"FALSE"<<endl;{
}
}
Помогите мне пожалуйста. Спасибо.
Попробуйте напечатать как 'b', так и' a', а также результаты промежуточных вычислений (в этом случае напечатайте 'c'). Они одинаковы? Почему или почему нет? – Patashu
Плавающая арифметика, особенно логарифмические операции, вносит некоторые неточности из-за конечной точности –
Я думаю, что я делаю это в 10-й раз ... Ваши переменные плавают, и они не представлены ТОЧНЫМ способом в памяти компьютера. Google это, вы найдете много информации :) – sashkello