□ subtract (x) — операция вычитания this - x;
□ xor(x ) — операция "исключающее ИЛИ" this лx.
В листинге 4.6 приведены примеры использования данных методов, а рис. 4.4 показывает результаты выполнения этого листинга.
Листинг 4.6. Методы класса BigIntegerВ Программе BiglntegerTest
import java.math.BigInteger; class BigIntegerTest{
public static void main(String[] args){
BigInteger a = new BigInteger("99999999999999999"); BigInteger b = new BigInteger("88888888888888888888"); System.out.println("bits in a = " + a.bitLength()); System.out.println("bits in b = " + b.bitLength()); System.out.println("a + b = " + a.add(b)); System.out.println("a & b = " + a.and(b)); System.out.println("a & ~b = " + a.andNot(b)); System.out.println("a / b = " + a.divide(b));
BigInteger[] r = a.divideAndRemainder(b);
System.out.println("a / b: q = " + r[0] + ", r = " + r[1]); System.out.println("gcd(a, b) = " + a.gcd(b)); System.out.println("max(a, b) = " + a.max(b)); System.out.println("min(a, b) = " + a.min(b)); System.out.println("a mod b = " + a.mod(b)); System.out.println("1/a mod b = " + a.modInverse(b)); System.out.println("a An mod b = " + a.modPow(a, b));
System.out.println("a * b = " + a.multiply(b)); System.out.println("-a = " + a.negate()); System.out.println("~a = " + a.not()); System.out.println("a | b = " + a.or(b)); System.out.println("a л3 = " + a.pow(3)); System.out.println("a % b = " + a.remainder(b)); System.out.println("a << 3 = " + a.shiftLeft(3)); System.out.println("a >> 3 = " + a.shiftRight(3)); System.out.println("sign(a) = " + a.signum()); System.out.println("a — b = " + a.subtract(b)); System.out.println("a лb = " + a.xor(b));
}
}
 |
Рис. 4.4.Методы класса BigInteger в программе BigIntegerTest |
Обратите внимание на то, что в программу листинга 4.6 надо импортировать пакет
j ava.math.
Класс BigDecimal расположен в пакете j ava.math. Каждый объект этого класса хранит два целочисленных значения: мантиссу вещественного числа в виде объекта класса BigInteger и неотрицательный десятичный порядок числа типа int. Например, для числа 76,34862 будет храниться мантисса 7 634 862 в объекте класса BigInteger и порядок 5 как целое число типа int. Таким образом, мантисса может содержать любое количество цифр, а порядок ограничен значением константы Integer.MAX_VALUE.
Результат операции над объектами класса BigDecimal округляется по одному из восьми правил, определяемых следующими статическими целыми константами:
□ round_ceiling — округление в сторону большего целого;
□ round_down — округление к нулю, к меньшему по модулю целому значению;
□ round_floor — округление к меньшему целому;
□ round_half_down — округление к ближайшему целому, среднее значение округляется к меньшему целому;
□ round_half_even — округление к ближайшему целому, среднее значение округляется к четному числу;
□ round_half_up — округление к ближайшему целому, среднее значение округляется к большему целому;
□ round_unnecessary — предполагается, что результат будет целым, и округление не понадобится;
□ round_up — округление от нуля, к большему по модулю целому значению.
Три константы — zero, one и ten — моделируют вещественные нуль, единицу и вещественное число десять в операциях с объектами класса BigDecimal.
В классе BigDecimal около двадцати конструкторов. Четыре из них были введены еще в Java 2.
□ BigDecimal (BigInteger bi) - объект будет хранить большое целое bi, порядок равен
нулю;
□ BigDecimal(BigInteger mantissa, int scale) — задается мантисса mantissa и неотрицательный порядок scale объекта; если порядок scale отрицателен, возникает исключительная ситуация;
□ BigDecimal(double d) — объект будет содержать вещественное число удвоенной точности d; если значение d бесконечно или NaN, то возникает исключительная ситуация;
□ BigDecimal (String val) - число задается строкой символов val, которая должна со
держать запись числа по правилам языка Java.
При использовании третьего из перечисленных конструкторов возникает неприятная особенность, отмеченная в документации. Поскольку вещественное число при переводе в двоичную форму представляется, как правило, бесконечной двоичной дробью, то при создании объекта, например BigDecimal (0.1), мантисса, хранящаяся в объекте, окажется очень большой. Она показана на рис. 4.5. Но при создании такого же объекта четвертым конструктором, BigDecimal ("0.1"), мантисса будет равна просто 1.
Остальные конструкторы определяют точность представления числового значения объекта и правила его округления с помощью объекта класса MathContext или непосредственно.
В классе переопределены методы doubleValue (), floatValue (), intValue (), longValue ( ).
Три константы — zero, one и ten — моделируют нуль, единицу и число десять в операциях с объектами класса BigDecimal.
Читать дальше
Конец ознакомительного отрывка
Купить книгу