Fixed method "doubleValue()".

Implementation still assumed that only the numerator can be negative.

Closes #69. [Thanks to "bkrogh" for reporting failing use-cases.]
diff --git a/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/BigFraction.java b/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/BigFraction.java
index 4405d49..d73d720 100644
--- a/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/BigFraction.java
+++ b/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/BigFraction.java
@@ -662,8 +662,9 @@
             return 0L;
         }
 
-        final long sign = numerator.signum() == -1 ? 1L : 0L;
+        final long sign = (numerator.signum() * denominator.signum()) == -1 ? 1L : 0L;
         final BigInteger positiveNumerator = numerator.abs();
+        final BigInteger positiveDenominator = denominator.abs();
 
         /*
          * The most significant 1-bit of a non-zero number is not explicitly
@@ -678,8 +679,8 @@
          * are not relevant for the significand of the prospective binary
          * floating-point value.
          */
-        final int denRightShift = denominator.getLowestSetBit();
-        final BigInteger divisor = denominator.shiftRight(denRightShift);
+        final int denRightShift = positiveDenominator.getLowestSetBit();
+        final BigInteger divisor = positiveDenominator.shiftRight(denRightShift);
 
         /*
          * Now, we're going to calculate the (significandLength + 2) most
diff --git a/commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/BigFractionTest.java b/commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/BigFractionTest.java
index 162d567..5d77884 100644
--- a/commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/BigFractionTest.java
+++ b/commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/BigFractionTest.java
@@ -183,6 +183,9 @@
         Assertions.assertEquals(0d, BigFraction.ZERO.doubleValue(), 0d);
 
         assertDoubleValue(0.5, 1, 2);
+        assertDoubleValue(-0.5, -1, 2);
+        assertDoubleValue(-0.5, 1, -2);
+        assertDoubleValue(0.5, -1, -2);
         assertDoubleValue(1.0 / 3.0, 1, 3);
 
         //NUMBERS-120