BaileyBorweinPlouffe extends Configured implements Tool { static long hexDigits(final long d) { if (d < 0) { throw new IllegalArgumentException("d = " + d + " < 0"); } else if (d > IMPLEMENTATION_LIMIT) { throw new IllegalArgumentException("d = " + d + " > IMPLEMENTATION_LIMIT = " + IMPLEMENTATION_LIMIT); } final double s1 = sum(1, d); final double s4 = sum(4, d); final double s5 = sum(5, d); final double s6 = sum(6, d); double pi = s1 + s1; if (pi >= 1) pi--; pi *= 2; if (pi >= 1) pi--; pi -= s4; if (pi < 0) pi++; pi -= s4; if (pi < 0) pi++; pi -= s5; if (pi < 0) pi++; pi -= s6; if (pi < 0) pi++; return (long) (pi * BBP_MULTIPLIER); }  int run(String[] args); static void main(String[] argv); static final String DESCRIPTION; }
@Test public void testHexDigit() { final long[] answers = {0x43F6, 0xA308, 0x29B7, 0x49F1, 0x8AC8, 0x35EA}; long d = 1; for(int i = 0; i < answers.length; i++) { Assert.assertEquals("d=" + d, answers[i], BaileyBorweinPlouffe .hexDigits(d)); d *= 10; } Assert.assertEquals(0x243FL, BaileyBorweinPlouffe.hexDigits(0)); }