Witam! Piszę program mający wypisać pole wielokąta na podstawie współrzędnych jego boków, z precyzją do 0.5 jednostki. Punkt początkowy jest na 0,0. Niestety wychodzą złe wyniki. Proszę o pomoc. Oto mój kod:
#include<iostream>
#define pkt pair<long long, long long >
using namespace std;
long long pole;
long long i_w(pkt A, pkt B)
{
int x1 = A.first, y1 = A.second,
x2 = B.first, y2 = B.second;
return x1*y2 - x2*y1;
}
int main()
{
long long n;
cin>>n;
pkt A, B, X;
cin>>A.first>>A.second;
X.first = A.first;
X.second = A.second;
for(long long i=1; i<n; i++)
{
cin>>B.first>>B.second;
pole+=i_w(A,B);
B.first=A.first;
B.second=A.second;
}
pole+=i_w(B,X);
if(pole<0)
pole=pole*-1;
if(pole%2==0)
cout<<pole/2;
else
cout<<pole/2<<".5";
}