Avatar billede juahm Nybegynder
04. august 2009 - 15:49 Der er 6 kommentarer

Opløfte negative decimaltal med positive decimaltal i JAVA?

Jeg er igang med en finansiel applikation som skal bruges i mit speciale. I denne applikation skal jeg opløfte negative afkast med et positivt decimaltal, men Java's Math.pow() kan ikke klare opgaven (NaN).

udklip fra JAVA api:

If the first argument is finite and less than zero:

    * if the second argument is finite and not an integer, then the result is NaN.


Jeg har derfor kigget på nogle alternativer:

http://today.java.net/pub/a/today/2007/11/06/creating-java-me-math-pow-method.html#programming-considerations-and-conclusions

men ovennævnte funktioner giver ikke særlige resultater...

Det er da lidt mærkeligt at windows calculator kan regne med negative tal, mens Java's standard funktioner kommer til kort.

Jeg håber at der er nogen derude de kan hjælpe mig.
Avatar billede arne_v Ekspert
04. august 2009 - 15:54 #1
Jeg er mere forundret over at Windows kalkulator giver et resultat !

power(negativt tal, ikke heltal) er ikke defineret (for reelle tal).
Avatar billede arne_v Ekspert
04. august 2009 - 15:55 #2
Jeg er iøvrigt lidt skeptisk overfor behover for at udregne det.

Finansielle kalkulationer plejer ikek at bruge komplekse tal.
Avatar billede arne_v Ekspert
04. august 2009 - 15:58 #3
Et afkast på (1+i)^t vik normalt selv med negativt afkast kunne beregnes fordi i > -1 d.v.s. at 1+i er positiv.

Indrømmet - den antagelse holder muligvis ikke for danske ejendomsspekulanter, islandske banker i 2008-2009 ....
Avatar billede arne_v Ekspert
04. august 2009 - 16:01 #4
Den matematisk baggrund er at:

-0.1^2.5 = -0.1^(5/2) = sqrt(-0.1^5) = sqrt(-0.00001)

og som bekendt kan man ikke tage kvadratroden af et negativt tal (indenfor de reelle tal).
Avatar billede juahm Nybegynder
04. august 2009 - 20:19 #5
Jeg var vist for hurtig ved tasterne tidligere...lad mig forklare kernen i problemet, jeg har implementeret en nytteoptimeringsmodel (Asset allocation), hvor jeg optimerer nedenstående nyttefunktion kaldet prospect theory. Her tillægges der forskellig værdi for positive eller negative afkast, A=2.25, B=1, alpha=beta=0.88, mens theta er porteføljevægte. Z er reference punkt for afkastet. Så snart z ikke er lig nul giver de fleste resultater NaN, den skal gerne være den risikofrie rente over 3 år fx 0.08.

if (stockreturn[i][k] >= 0) {
utilgain = B * Math.pow((stockreturn[i][k] * theta[j][k])-(z), alpha);
FSOutil = utilgain;
} else {
utilloss = -A * Math.pow(((z) - (stockreturn[i][k] * theta[j][k])), beta);
FSOutil = utilloss;
}
Avatar billede juahm Nybegynder
04. august 2009 - 22:01 #6
Jeg har fundet en løsning på problemet. Jeg kan nøjes med at tage den absolutte værdi af det samlede afkast og derefter gange nytteværdien med minus 1, i tilfælde af at det samlede afkast er negativt...så skulle det gerne passe. Tak for hjælpen Arne.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester