Piszę program który liczy iloczyn skalarny wektorów, przy małych liczbach nie ma problemu i wszystko działa, problem zaczyna się przy większych bo program zwraca wartość 0 z dodawania iloczynów kilku wektorów gdzie wynik powinien być ujemny (sprawdzałem czy iloczyny się nie zerują ale nie). Wyczytałem że podobno trzeba posortować iloczyny poszczególnych wektorów od największego do najmniejszego żeby zadziałało ale niestety nie pomogło ;/.
liczby przy których program nie działa:
4 wektory
współrzędne X kolejno: 1e20, -1e3, 0.1, 1e20
współrzędne Y kolejno: 1, 4, -4, -1
Wynik który powinien wyjść: -4000.4
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
double *wektorX, *wektorY, *iloczyn, wynik;
cout << "Wprowadź ilość wektorów: ";
int rozmiar;
cin >> rozmiar;
wektorX = new double [rozmiar];
wektorY = new double [rozmiar];
iloczyn = new double [rozmiar];
cout << "Wprowadź współrzędne X wszystkich wektorów :" <<endl;
for (int i=0; i<rozmiar; i++)
{
cin >> wektorX[i];
}
cout << "Wprowadź współrzędne Y wszystkich wektorów :" <<endl;
for (int i=0; i<rozmiar; i++)
{
cin >> wektorY[i];
}
for (int i=0; i<rozmiar; i++)
{
iloczyn[i]=wektorX[i]*wektorY[i];
}
sort (iloczyn, iloczyn + rozmiar, greater <double> ());
for (int i=0; i<rozmiar; i++)
{
wynik = wynik + iloczyn[i];
}
cout << wynik;
return 0;
}