BigDecimalMath { public static BigDecimal bernoulli(int n, MathContext mathContext) { if (n < 0) { throw new ArithmeticException("Illegal bernoulli(n) for n < 0: n = " + n); } BigRational b = BigRational.bernoulli(n); return b.toBigDecimal(mathContext); } private  BigDecimalMath(); static BigDecimal toBigDecimal(String string); static BigDecimal toBigDecimal(String string, MathContext mathContext); static boolean isIntValue(BigDecimal value); static boolean isLongValue(BigDecimal value); static boolean isDoubleValue(BigDecimal value); static BigDecimal mantissa(BigDecimal value); static int exponent(BigDecimal value); static int significantDigits(BigDecimal value); static BigDecimal integralPart(BigDecimal value); static BigDecimal fractionalPart(BigDecimal value); static BigDecimal round(BigDecimal value, MathContext mathContext); static BigDecimal roundWithTrailingZeroes(BigDecimal value, MathContext mathContext); static BigDecimal reciprocal(BigDecimal x, MathContext mathContext); static BigDecimal factorial(int n); static BigDecimal factorial(BigDecimal x, MathContext mathContext); static BigDecimal gamma(BigDecimal x, MathContext mathContext); static BigDecimal bernoulli(int n, MathContext mathContext); static BigDecimal pow(BigDecimal x, BigDecimal y, MathContext mathContext); static BigDecimal pow(BigDecimal x, long y, MathContext mathContext); static BigDecimal sqrt(BigDecimal x, MathContext mathContext); static BigDecimal root(BigDecimal x, BigDecimal n, MathContext mathContext); static BigDecimal log(BigDecimal x, MathContext mathContext); static BigDecimal log2(BigDecimal x, MathContext mathContext); static BigDecimal log10(BigDecimal x, MathContext mathContext); static BigDecimal pi(MathContext mathContext); static BigDecimal e(MathContext mathContext); static BigDecimal exp(BigDecimal x, MathContext mathContext); static BigDecimal sin(BigDecimal x, MathContext mathContext); static BigDecimal asin(BigDecimal x, MathContext mathContext); static BigDecimal cos(BigDecimal x, MathContext mathContext); static BigDecimal acos(BigDecimal x, MathContext mathContext); static BigDecimal tan(BigDecimal x, MathContext mathContext); static BigDecimal atan(BigDecimal x, MathContext mathContext); static BigDecimal atan2(BigDecimal y, BigDecimal x, MathContext mathContext); static BigDecimal cot(BigDecimal x, MathContext mathContext); static BigDecimal acot(BigDecimal x, MathContext mathContext); static BigDecimal sinh(BigDecimal x, MathContext mathContext); static BigDecimal cosh(BigDecimal x, MathContext mathContext); static BigDecimal tanh(BigDecimal x, MathContext mathContext); static BigDecimal coth(BigDecimal x, MathContext mathContext); static BigDecimal asinh(BigDecimal x, MathContext mathContext); static BigDecimal acosh(BigDecimal x, MathContext mathContext); static BigDecimal atanh(BigDecimal x, MathContext mathContext); static BigDecimal acoth(BigDecimal x, MathContext mathContext);  }
@Test public void testBernoulli() { assertBigDecimal(toCheck(1), BigDecimalMath.bernoulli(0, MC), MC_CHECK_DOUBLE); assertBigDecimal(toCheck(-1.0/2), BigDecimalMath.bernoulli(1, MC), MC_CHECK_DOUBLE); assertBigDecimal(toCheck(1.0/6), BigDecimalMath.bernoulli(2, MC), MC_CHECK_DOUBLE); assertBigDecimal(toCheck(0), BigDecimalMath.bernoulli(3, MC), MC_CHECK_DOUBLE); assertBigDecimal(toCheck(-1.0/30), BigDecimalMath.bernoulli(4, MC), MC_CHECK_DOUBLE); assertBigDecimal(toCheck(0), BigDecimalMath.bernoulli(5, MC), MC_CHECK_DOUBLE); assertBigDecimal(toCheck(1.0/42), BigDecimalMath.bernoulli(6, MC), MC_CHECK_DOUBLE); assertBigDecimal(toCheck(0), BigDecimalMath.bernoulli(7, MC), MC_CHECK_DOUBLE); assertBigDecimal(toCheck(-1.0/30), BigDecimalMath.bernoulli(8, MC), MC_CHECK_DOUBLE); assertBigDecimal(toCheck(0), BigDecimalMath.bernoulli(9, MC), MC_CHECK_DOUBLE); assertBigDecimal(toCheck(5.0/66), BigDecimalMath.bernoulli(10, MC), MC_CHECK_DOUBLE); assertBigDecimal(toCheck(0), BigDecimalMath.bernoulli(11, MC), MC_CHECK_DOUBLE); assertBigDecimal(toCheck(-691.0/2730),BigDecimalMath.bernoulli(12, MC), MC_CHECK_DOUBLE); assertBigDecimal(toCheck(0), BigDecimalMath.bernoulli(13, MC), MC_CHECK_DOUBLE); assertBigDecimal(toCheck(7.0/6), BigDecimalMath.bernoulli(14, MC), MC_CHECK_DOUBLE); assertBigDecimal(toCheck(0), BigDecimalMath.bernoulli(15, MC), MC_CHECK_DOUBLE); assertBigDecimal(toCheck(-3617.0/510),BigDecimalMath.bernoulli(16, MC), MC_CHECK_DOUBLE); assertBigDecimal(toCheck(0), BigDecimalMath.bernoulli(17, MC), MC_CHECK_DOUBLE); assertBigDecimal(toCheck(43867.0/798),BigDecimalMath.bernoulli(18, MC), MC_CHECK_DOUBLE); }
@Test(expected = ArithmeticException.class) public void testBernoulliNegative() { BigDecimalMath.bernoulli(-1, MC); }
@Test public void testBernoulliUnlimited() { assertBigDecimal(toCheck(1), BigDecimalMath.bernoulli(0, MathContext.UNLIMITED), MC_CHECK_DOUBLE); assertBigDecimal(toCheck(-1.0/2), BigDecimalMath.bernoulli(1, MathContext.UNLIMITED), MC_CHECK_DOUBLE); assertBigDecimal(toCheck(1), BigDecimalMath.bernoulli(3, MathContext.UNLIMITED), MC_CHECK_DOUBLE); }
@Test(expected = ArithmeticException.class) public void testBernoulliUnlimitedFail() { BigDecimalMath.bernoulli(2, MathContext.UNLIMITED); }