2015-09-26 3 views
2

Я должен вычислить следующую функцию:Проблема с BigDecimal в Java

f(x)=x^3-x-1 

Я создал класс, названный «Функция» и внутри него, у меня есть метод расчета описанной выше функции.

вот мой код:

double function(double num) 
{ 
    BigDecimal first,second; 
    double a,b,c,b_copy; 
    a = Math.pow(num, 3); 
    b=(double)a-num; 
    first=new BigDecimal(b); 
    second=new BigDecimal("1.0"); 
    first.min(second); 
    b_copy=first.doubleValue(); 
    return b_copy ; 
} 

Я на самом деле есть некоторые проблемы с этими двумя строками кода:

first.min(second); 
    b_copy=first.doubleValue(); 

, например, когда должно быть -1, но это 0 . Почему это?

+1

'мин' не делает вычитание. – Thilo

ответ

4

min(...) метод возвращает BigDecimal, он не изменяет его. Попробуйте это:

first = first.min(second); 

Кроме того, если вы хотите, чтобы вычесть 1 из значения first (как ваша формула показывает), используйте метод subtract(...), потому что min(...) фактически возвращает наименьшее значения двух BigDecimal с.

first = first.subtract(second); 
4

BigDecimal класс непреложный. Вы не можете изменить его после его создания.

Когда вы меняете этот объект, он всегда возвращает новый объект.

first=new BigDecimal(b); // you created an object 
second=new BigDecimal("1.0"); 
first.min(second); // you just modifying it. Hence a new object returned and you never received. 

Чтобы получить вновь созданный объект, вы можете написать

first = first.min(second); 

Когда вы пишете это, вы назначаете первое с модифицированной BigDecimal задней

Не только min(), если вы выполняете какой-либо на BigDecimal вам нужно переназначить его.