Skip to content

Commit

Permalink
Updated interval library.
Browse files Browse the repository at this point in the history
  • Loading branch information
sletz committed Apr 17, 2023
1 parent 4be8845 commit ab944af
Show file tree
Hide file tree
Showing 5 changed files with 20 additions and 10 deletions.
2 changes: 0 additions & 2 deletions compiler/interval/QUESTIONS.md

This file was deleted.

19 changes: 11 additions & 8 deletions compiler/interval/intervalAnd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ interval interval_algebra::And(const interval& x, const interval& y) const
if (x0 == x1)
{
int v = x0; // only element of interval x
while ((v & 1) == 0) // while we encounter zeroes at the lower end of v
while ((v & 1) == 0 and v != 0) // while we encounter zeroes at the lower end of v
{
v = v/2;
precisionx++;
Expand All @@ -151,7 +151,7 @@ interval interval_algebra::And(const interval& x, const interval& y) const
if (y0 == y1)
{
int v = y0; // only element of interval y
while ((v & 1) == 0) // while we encounter zeroes at the lower end of v
while ((v & 1) == 0 and v != 0) // while we encounter zeroes at the lower end of v
{
v = v/2;
precisiony++;
Expand All @@ -163,11 +163,14 @@ interval interval_algebra::And(const interval& x, const interval& y) const

void interval_algebra::testAnd() const
{
analyzeBinaryMethod(10, 2000, "And", interval(256, 257), interval(12), myAnd, &interval_algebra::And);
analyzeBinaryMethod(10, 2000, "And", interval(-1000, -800), interval(12), myAnd, &interval_algebra::And);
analyzeBinaryMethod(10, 2000, "And", interval(-1000, -800), interval(12), myAnd, &interval_algebra::And);
analyzeBinaryMethod(10, 2000, "And", interval(-128, 128), interval(127), myAnd, &interval_algebra::And);
analyzeBinaryMethod(10, 2000, "And", interval(0, 1000), interval(63, 127), myAnd, &interval_algebra::And);
analyzeBinaryMethod(10, 2000, "And", interval(-1000, 1000), interval(63, 127), myAnd, &interval_algebra::And);
analyzeBinaryMethod(10, 2000, "And", interval(0, 257, 0), singleton(12), myAnd, &interval_algebra::And);
analyzeBinaryMethod(10, 2000, "And", interval(-1000, -800, 0), singleton(12), myAnd, &interval_algebra::And);
analyzeBinaryMethod(10, 2000, "And", interval(-1000, -800, 0), singleton(12), myAnd, &interval_algebra::And);
analyzeBinaryMethod(10, 2000, "And", interval(-128, 128, 0), singleton(127), myAnd, &interval_algebra::And);
analyzeBinaryMethod(10, 2000, "And", interval(0, 1000, 0), interval(63, 127), myAnd, &interval_algebra::And);
analyzeBinaryMethod(10, 2000, "And", interval(-1000, 1000, 0), interval(63, 127), myAnd, &interval_algebra::And);
analyzeBinaryMethod(10, 2000, "And", interval(10,20, 0), singleton(0), myAnd, &interval_algebra::And);
analyzeBinaryMethod(10, 2000, "And", singleton(0), interval(15, 25, 0), myAnd, &interval_algebra::And);
analyzeBinaryMethod(10, 2000, "And", singleton(0), singleton(0), myAnd, &interval_algebra::And);
}
} // namespace itv
3 changes: 3 additions & 0 deletions compiler/interval/intervalOr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -81,5 +81,8 @@ void interval_algebra::testOr() const
analyzeBinaryMethod(10, 20000, "Or", interval(-128, 128), interval(127), myOr, &interval_algebra::Or);
analyzeBinaryMethod(10, 20000, "Or", interval(0, 1000), interval(63, 127), myOr, &interval_algebra::Or);
analyzeBinaryMethod(10, 20000, "Or", interval(-1000, 1000), interval(63, 127), myOr, &interval_algebra::Or);
analyzeBinaryMethod(10, 2000, "Or", interval(10,20), interval(0), myOr, &interval_algebra::Or);
analyzeBinaryMethod(10, 2000, "Or", interval(0), interval(15, 25), myOr, &interval_algebra::Or);
analyzeBinaryMethod(10, 2000, "Or", interval(0), interval(0), myOr, &interval_algebra::Or);
}
} // namespace itv
4 changes: 4 additions & 0 deletions compiler/interval/intervalXor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,5 +90,9 @@ void interval_algebra::testXor() const

analyzeBinaryMethod(10, 20000, "Xor", interval(-1000, 1000, lx(generator)), interval(63, 127, ly(generator)), myXor, &interval_algebra::Xor);
analyzeBinaryMethod(10, 20000, "Xor", interval(-1000, 1000, lx(generator)), interval(63, 127, ly(generator)), myXor, &interval_algebra::Xor);

analyzeBinaryMethod(10, 2000, "Xor", interval(10,20), interval(0), myXor, &interval_algebra::Xor);
analyzeBinaryMethod(10, 2000, "Xor", interval(0), interval(15, 25), myXor, &interval_algebra::Xor);
analyzeBinaryMethod(10, 2000, "Xor", interval(0), interval(0), myXor, &interval_algebra::Xor);
}
} // namespace itv
2 changes: 2 additions & 0 deletions compiler/interval/interval_def.hh
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,8 @@ inline interval reunion(const interval& i, const interval& j)

inline interval singleton(double x, int lsb=-24)
{
if (x==0) return {0,0,0};

int precision = lsb;

while (floor(x*pow(2, -precision-1)) == x*pow(2, -precision-1) and x != 0)
Expand Down

0 comments on commit ab944af

Please sign in to comment.