» »

Java, double števila izven obsega (Problem)

Java, double števila izven obsega (Problem)

marjan_h ::

Namreč problem je da mi pri računanju double števil vrne tole -1.8189894035458565E-12, in pri naslednjem ukazu moram narediti naslednjo operacijo 1787.0214424751148 / -1.8189894035458565E-12.

Tukaj je ena velika težava. Če uporabim Math.ceil ali Math.floor mi slednje število -1.8189894035458565E-12
zaokroži na 0.

Kar je pa spet narobe. Ker ni dovoljeno deliti z 0, mi vrne Nan.



Kako se rešuje ta problem?

jype ::

Hm? ceil in floor vrneta celo število in v tvojem primeru je to nič. Zakaj pa to počneš, če nočeš nič?

marjan_h ::

Ja če ne zaokrožim me vrže ven iz obsega števil in dobim infinity v javi. Če pa zaokrožim pride pa 0 in ne smem deliti z nič.

Kaj torej narediti?

jype ::

To je blizu ničle. Infinity dobiš ker deliš z 1.8 * 10 na -12. Uporabi številski tip, ki to prenese: http://docs.oracle.com/javase/1.4.2/doc...

marjan_h ::

Ja samo kako lahko uporabiš pri tem številskem tipu recimo potenciranje. Metode v tem številskem tipu so samo osnovne.

marjan_h ::

Kako hudiča je zasnovana Java. To je neumnost. Uporabiš eno bolj zapletenejšo formulo z double števili in dobiš ven Infinity ali pa NaN.

pegasus ::

V fortranu to zihr dela.

Pebkac ::

Problem ni v Javi, pri računanju z floating point števili v večini jezikov boš naletel na določene omejitve Floating point @ Wikipedia

Si ziher da ne moreš izračunat 1787.0214424751148 / -1.8189894035458565E-12?
Ravnokar sprobano Java meni to brez problema izračuna in sicer dobim rezultat -9.824254275432145E14

Spura ::

Ma dej, 10^-14 double zihr prenese. Ce se ne motim je najmanjsa stevilka okoli 10^-210.
Pomojem mas zjebano formulo.

marjan_h ::

Ja, sej to je nenavadno. Stvar sem rešil tako da sem zaokrozil na 5 decimalnih mest.

Wrop ::

Lahko pokažeš formulo in vhodne podatke?

marjan_h ::

Zanimivo je to, da sedaj ko ročno vnesem podatke normalno vrne vrednost double.


public class Test {
    
    public static void main(String args[]){
        double a = 106.3016990363956;
        double b = 1478.7176398586653;
        double c = 16.67657694555068;
        double d = 276.9919474098783;
        int k = 8;
        
        double koncnaVrednost = (c * b - a * c) / (k * b - Math.pow(a,2));
        System.out.println(koncnaVrednost);
    }
}




Celotna koda je predolga, da bi jo sem kopiral.

Mogoče kdo vidi problem v formuli? Gre za metodo določanje premice pri trendih.

Mislim sama formula je pravilna, ampak če najde mogoče kdo mesto kjer bi lahko dobil rezultat

2.34252342352421E^32 itd.

Spura ::

Ne vem kje si ti dobil tako vrednost. Btw spremenljivke d ne uporabljas.
Tale tvoja koda vrne cifro ranga med 10 in 100.

Potencialno lahko dobis 0 v imenovalcu kadar k * b = a^2, kadar sta pa k * b in a^2 priblizno ista pa dobis NaN.

Zgodovina sprememb…

  • spremenil: Spura ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

float vs decimal

Oddelek: Programiranje
366243 (4376) Looooooka
»

[c#] NaN, not a number

Oddelek: Programiranje
111432 (1191) Infinity
»

[c#] Vstavljanje vrednosti v tabelo

Oddelek: Programiranje
111603 (1425) Cvenemir
»

[Java] Kako filtrirati, katera števila lahko vpišeš?

Oddelek: Programiranje
182072 (1774) fiction
»

[C++] Functor za izračun osnovne statistike podatk. strukture (vector,list...)

Oddelek: Programiranje
91471 (1384) Vesoljc

Več podobnih tem