/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Meget små/store tal
Fra : Michael Knudsen


Dato : 23-10-08 21:37

Hej,

Jeg har et datasæt, som indeholder tal helt ned fra 1E-180 og op til
0. Findes der en snedig måde at håndtere disse tal på i Java? Mit
problem er, at jeg gerne vil transformere dem med logaritmen (det vil
sige Math.log), men det går jo galt, når de engang imellem er 0.
Derfor tænkte jeg på først at forskyde tallene og beregne log(x+1) for
hvert x i mit datasæt. Desværre bliver de meget små x'er kvalt, når
jeg lægger 1 til, også selv om jeg f.eks. prøver

Math.log((float)x + (float)1)

God idéer modtages meget gerne!

--
Michael Knudsen

 
 
Thorbjørn Ravn Ander~ (24-10-2008)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 24-10-08 10:09

Michael Knudsen skrev den 24-10-2008 05:36:
> Hej,
>
> Jeg har et datasæt, som indeholder tal helt ned fra 1E-180 og op til
> 0. Findes der en snedig måde at håndtere disse tal på i Java? Mit
> problem er, at jeg gerne vil transformere dem med logaritmen (det vil
> sige Math.log), men det går jo galt, når de engang imellem er 0.
> Derfor tænkte jeg på først at forskyde tallene og beregne log(x+1) for
> hvert x i mit datasæt. Desværre bliver de meget små x'er kvalt, når
> jeg lægger 1 til, også selv om jeg f.eks. prøver
>
> Math.log((float)x + (float)1)
>
> God idéer modtages meget gerne!

Gemme dem som java.lang.BigDecimal og trække den information ud du har
brug for med scale() methoden?

Michael Knudsen (24-10-2008)
Kommentar
Fra : Michael Knudsen


Dato : 24-10-08 13:05

On Oct 24, 2:09 am, Thorbjørn Ravn Andersen <thunderax...@gmail.com>
wrote:

> Gemme dem som java.lang.BigDecimal og trække den information ud du har
> brug for med scale() methoden?

Tak for tippet. Jeg havde helt glemt eksistensen af BigDecimal. Nu har
jeg imidlertid fundet nogle andre størrelser at arbejde med, men hvis
de ikke fungerer efter hensigten, må jeg tilbage og prøve BigDecimal.

--
Michael Knudsen

Michael Zedeler (25-10-2008)
Kommentar
Fra : Michael Zedeler


Dato : 25-10-08 16:33

Michael Knudsen wrote:
> Hej,
>
> Jeg har et datasæt, som indeholder tal helt ned fra 1E-180 og op til
> 0. Findes der en snedig måde at håndtere disse tal på i Java? Mit
> problem er, at jeg gerne vil transformere dem med logaritmen (det vil
> sige Math.log), men det går jo galt, når de engang imellem er 0.
> Derfor tænkte jeg på først at forskyde tallene og beregne log(x+1) for
> hvert x i mit datasæt. Desværre bliver de meget små x'er kvalt, når
> jeg lægger 1 til, også selv om jeg f.eks. prøver
>
> Math.log((float)x + (float)1)
>
> God idéer modtages meget gerne!

Det lyder meget mærkeligt. Hvis du regner på så små tal, er det et
temmelig specielt problem, du har fat i. Hvad drejer det sig om?

Mvh. Michael.

Arne Vajhøj (25-10-2008)
Kommentar
Fra : Arne Vajhøj


Dato : 25-10-08 19:40

Michael Knudsen wrote:
> Jeg har et datasæt, som indeholder tal helt ned fra 1E-180 og op til
> 0. Findes der en snedig måde at håndtere disse tal på i Java?

Første spørgsmål må være: hvilke egenskaber har du behov for som
en helt almindelig double ikke har ?

Den have 0 og den kan have ned til 2E-308/5E-324.

> Mit
> problem er, at jeg gerne vil transformere dem med logaritmen (det vil
> sige Math.log), men det går jo galt, når de engang imellem er 0.
> Derfor tænkte jeg på først at forskyde tallene og beregne log(x+1) for
> hvert x i mit datasæt. Desværre bliver de meget små x'er kvalt, når
> jeg lægger 1 til, også selv om jeg f.eks. prøver
>
> Math.log((float)x + (float)1)
>
> God idéer modtages meget gerne!

Du kan vælge en bedre konstant end 1.

1E-180 f.eks.

Arne

Lasse Reichstein Nie~ (26-10-2008)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 26-10-08 12:32

Michael Knudsen <micknudsen@gmail.com> writes:

> Jeg har et datasæt, som indeholder tal helt ned fra 1E-180 og op til
> 0.

Du mener vel "ned til 0"? Selvom de andre tal er små, så er de stadig
større end nul.

> Findes der en snedig måde at håndtere disse tal på i Java? Mit
> problem er, at jeg gerne vil transformere dem med logaritmen (det vil
> sige Math.log), men det går jo galt, når de engang imellem er 0.

Kan du så ikke lave et specialtilfælde for nul?
Hvilken egenskab ved logaritmen af tallet er det du er interesseret i?
Altså: Hvorfor vil du bruge logaritmen?

> Derfor tænkte jeg på først at forskyde tallene og beregne log(x+1) for
> hvert x i mit datasæt.

Og vil den egenskab blive bevaret ved at lægge en til?

> Desværre bliver de meget små x'er kvalt, når
> jeg lægger 1 til, også selv om jeg f.eks. prøver
>
> Math.log((float)x + (float)1)

Brug altid double. Der er ikke noget sparet ved at bruge float, ud
over lidt hukommelse hvis tallet gemmes.

/L
--
Lasse Reichstein Holst Nielsen
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'

Søg
Reklame
Statistik
Spørgsmål : 177577
Tips : 31968
Nyheder : 719565
Indlæg : 6409071
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste