chunky77 Ответов: 1

Сомнение относительно функции precision( ) в C++


Дан массив размера n и несколько значений, вокруг которых нам нужно повернуть массив влево.

Ввод:
Первая строка состоит из T-тестового случая. Первая строка каждого тестового случая состоит из N и K, где N обозначает количество элементов массива, А K - количество мест для сдвига. Вторая строка каждого тестового случая состоит из элементов массива.

Выход:
Однострочный вывод, печать повернутого массива.

Ограничения:
1<=T<=100
1<=N<=10^4
1<=K<=10^4

Пример:
Ввод:
1
5 14
1 3 5 7 9
Выход:
9 1 3 5 7

Мой код прилагается здесь, хотя я получаю правильный ответ, но есть небольшая разница (.000004) в желаемом выходе и ожидаемом выходе (это касается использования функции точности), что я должен изменить здесь?

Что я уже пробовал:

Мой код таков-

#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int main()
{

    int t;
    cin>>t;
     
    while(t--)
    {
        int set_size,i;
        cin>>set_size;
        int arr[set_size];
        for(i=0;i<set_size;i++)
        {
            cin>>arr[i];
        }
        
    unsigned int pow_set_size = pow(2, set_size);
	int counter, j;
    float sum_avg=0;
    cout<<fixed<<setprecision(6);
	/*Run from counter 000..0 to 111..1*/
	for(counter = 0; counter < pow_set_size; counter++)
	{
	
           float avg,sum=0;int no=0;
			
	for(j = 0; j < set_size; j++)
	{
		/* Check if jth bit in the counter is set
			If set then pront jth element from set */
			
			
		if(counter & (1<<j))
			{
			      //  cout<<arr[j];
			        sum+=arr[j];
			        no++;
//			        int no=0,sum=0,digit;
//			        float avg;
//			        while(arr[j]!=0)
//			        {
//			          digit=arr[j]%10;
//			          sum=+digit;
//			          arr[j]/=10;
//			          no++;
//			          
//			        }
//			        avg=sum/no;
//			        
//			
//			    overall_sum+=avg;
//			    cout<<"overall_sum="<<overall_sum<<endl;
			}
			
			
			
	}
	
	if(sum!=0)
	{avg=sum/no;
	cout<<"avg= "<<avg;
	    sum_avg+=avg;
	}
	cout<<endl;
	
    }
  // cout<<fixed<<setprecision(6);
   cout<<sum_avg<<endl;
    }
    return 0;
    
}




 //1
//3
//2 3 5

//Its Correct output is:
//23.333333

//And Your Output is:
//23.333334

Patrice T

Вставленный вами оператор не имеет отношения ни к вашей проблеме, ни к вашему коду.

chunky77

Я думаю, что, возможно, я не использую функцию precision( ) должным образом.

1 Ответов

Рейтинг:
2

Richard MacCutchan

Числа точек флотации на компьютере обычно являются приближениями, и их точность зависит от того, являются ли они одинарными или двойными значениями длины. Видеть Что Каждый Компьютерщик Должен Знать Об Арифметике С Плавающей Запятой[^].