30/09/2018, 18:45
Làm thế nào để so sánh 2 số thực trong c?
Mình có làm 1 bài tập kiểm tra xem điểm có thuộc tam giác không và ép điều kiện cuối là diện tích MAB+MAC+MBC=ABC mình làm đến cuối rồi cũng đúng rồi nhưg không sao so sánh được 2 thằng đó mà kết luận ai giúp mình cách giải quyết với
#include “stdafx.h”
#include<stdio.h>
#include<conio.h>
#include<math.h>
int main()
{
float x1, y1, x2, y2, x3, y3, xm, ym;
float s, smab, smac, smbc, sm;
float ab, bc, ac;
float ma, mb, mc;
float p, pmab, pmac, pmbc;
printf("Nhap toa do diem thu nhat : ");
scanf_s("%f%f", &x1, &y1);
printf("Nhap toa do diem thu hai : ");
scanf_s("%f%f", &x2, &y2);
printf("Nhap toa do diem thu ba : ");
scanf_s("%f%f", &x3, &y3);
printf("Nhap toa do diem M : ");
scanf_s("%f%f", &xm, &ym);
ab = sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2));
bc = sqrt(pow(x3 - x2, 2) + pow(y3 - y2, 2));
ac = sqrt(pow(x3 - x1, 2) + pow(y3 - y1, 2));
p = (ab + bc + ac) / 2;
s = sqrt(p*(p - ab)*(p - bc)*(p - ac));
ma = sqrt(pow(xm - x1, 2) + pow(ym - y1, 2));
mb = sqrt(pow(xm - x2, 2) + pow(ym - y2, 2));
mc = sqrt(pow(xm - x3, 2) + pow(ym - y3, 2));
//mab
pmab = (ab + ma + mb) / 2;
smab = sqrt(pmab*(pmab - ab)*(pmab - mb)*(pmab - ma));
//mac
pmac = (ac + ma + mc) / 2;
smac = sqrt(pmac*(pmac - ac)*(pmac - ma)*(pmac - mc));
//mbc
pmbc = (bc + mc + mb) / 2;
smbc = sqrt(pmbc*(pmbc - bc)*(pmbc - mb)*(pmbc - mc));
sm = smbc + smab + smac;
printf("%f
", sm);
printf("%f
", s);
if (sm==s)
{
printf("M nam trong");
}
else
{
printf("M nam ngoai");
}
_getch();
return 0;
}
Bài liên quan
1 kinh nghiệm của mình thì đôi lúc cái hàm pow nó bị sai kết quá. trong trường hợp của bạn, bạn có thể đặt breakpoint để debug xem nó sai như thế nào. Nếu không thì thử
if (sm-s==0)
else
bool eq(double a,double b,double eps=1e-6){
return abs(a-b)< eps;
}
Bạn tìm hiểu thêm về epsilon nhé, nói đơn giản nó chỉ là một số thực đủ nhỏ do mình tự định nghĩa để xét xem hiệu 2 số
(a - b)
có bằng nhau không.Source: http://www.learncpp.com/cpp-tutorial/35-relational-operators-comparisons/
Ok thank mọi người!!