triangle: iteration 2
This commit is contained in:
parent
f0f0058645
commit
489e524385
1 changed files with 10 additions and 25 deletions
|
|
@ -10,7 +10,6 @@ using namespace std;
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
|
||||||
inline bool fuzzy_equal(double a, double b)
|
inline bool fuzzy_equal(double a, double b)
|
||||||
{
|
{
|
||||||
typedef numeric_limits<double> limits_t;
|
typedef numeric_limits<double> limits_t;
|
||||||
|
|
@ -24,39 +23,25 @@ inline bool fuzzy_equal(double a, double b)
|
||||||
|| abs(a - b) < min;
|
|| abs(a - b) < min;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool is_valid(double a, double b, double c)
|
|
||||||
{
|
|
||||||
return a > 0 && b > 0 && c > 0
|
|
||||||
&& a + b > c
|
|
||||||
&& a + c > b
|
|
||||||
&& b + c > a;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool is_equilateral(double a, double b, double c)
|
|
||||||
{
|
|
||||||
return fuzzy_equal(a, b)
|
|
||||||
&& fuzzy_equal(a, c)
|
|
||||||
&& fuzzy_equal(b, c);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool is_isosceles(double a, double b, double c)
|
|
||||||
{
|
|
||||||
return fuzzy_equal(a, b)
|
|
||||||
|| fuzzy_equal(a, c)
|
|
||||||
|| fuzzy_equal(b, c);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
kind_t kind(double a, double b, double c)
|
kind_t kind(double a, double b, double c)
|
||||||
{
|
{
|
||||||
if (!is_valid(a, b, c))
|
if (a > b) swap(a, b);
|
||||||
|
if (a > c) swap(a, c);
|
||||||
|
if (b > c) swap(b, c);
|
||||||
|
|
||||||
|
if (a <= 0)
|
||||||
throw domain_error("invalid triangle");
|
throw domain_error("invalid triangle");
|
||||||
|
|
||||||
if (is_equilateral(a, b, c))
|
if (a + b <= c)
|
||||||
|
throw domain_error("");
|
||||||
|
|
||||||
|
if (fuzzy_equal(a, c))
|
||||||
return equilateral;
|
return equilateral;
|
||||||
|
|
||||||
if (is_isosceles(a, b, c))
|
if (fuzzy_equal(a, b) || fuzzy_equal(b, c))
|
||||||
return isosceles;
|
return isosceles;
|
||||||
|
|
||||||
return scalene;
|
return scalene;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue