Я показал два фрагмента кода. Я не совсем понимаю, как использование pow() по-разному приводит к различию в этих кодах. Заранее большое спасибо.различные ответы с использованием pow() в C++ при использовании в разных местах, хотя такой же ожидается
В этой задаче вы должны вычислить сумму всех целых чисел от 1 до n, но вы должны брать все степени в два с минусом в сумме. Например, для n = 4 сумма равна -1, 2 + 3 - 4 = - 4, поскольку 1, 2 и 4 равны 2 , 2 и 2 соответственно. Вычислите ответ для t значений n.
#include<bits/stdc++.h>
typedef long long ll;
typedef double dl;
using namespace std;
int main() {
ll n,t;
ll i,cnt=0;
cin>>t;
while(t--)// for 't' number of test cases
{
cin>>n;
for(i=1,cnt=0;i<=n;i*=2,cnt++); //counting number of terms in the GP:1,2,4,....
cout<<setprecision(20)<<((n*(n+1))/2)-(2*(pow(2,cnt)-1))<<endl;
}
return 0;
}
//output for above code:499999998352516352
// and the slightly modified code..
#include<bits/stdc++.h>
typedef long long ll;
typedef double dl;
using namespace std;
int main() {
ll n,t;
ll i,cnt=0;
cin>>t;
while(t--)// for 't' number of test cases
{
cin>>n;
for(i=1,cnt=0;i<=n;i*=2,cnt++);
ll k=(pow(2,cnt)); //instead of directly printing the answer, 'k' is computed and then used to find the answer.
cout<<setprecision(20)<<((n*(n+1))/2)-(2*(k-1))<<endl;
}
return 0;
}
//output for above code:499999998352516354
// the second one is the correct answer, the first one is wrong. how does pow() change the values here?
'pow()' работает (и возвращает) число с плавающей запятой. Номера с плавающей запятой по сути неточно. –
Спасибо, но как мы узнаем, какое использование будет работать должным образом? – Sreenidhi
Определите «правильно». Числа с плавающей запятой по сути своей неточны. Вы можете только спросить, допустима ли ошибка согласования в пределах допустимого допуска. Посмотрите на [что каждый компьютерный ученый должен знать о арифметике с плавающей точкой] (http://floating-point-gui.de/) для деталей. – Angew