[java] NaN's filteren

Pagina: 1
Acties:

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 07-04 15:08
Ik heb ben dus bezig om data-files in te lezen en deze te plotten op een geografische kaart, maar in de data zitten nog wel eens wat NaN (doubles).
Nu wil ik deze eruit filteren, maar het lukt niet. Weet iemand wat ik fout doe?
Ik dacht door gewoon te zoeken naar Double.NaN, maar blijkbaar lukt dat niet.
Dit is mijn code:
Java:
1
2
3
4
5
6
7
for(int i=0; i<test.length; i++) {
  for(int j=0; j<test[0].length; j++) {
     if(test[i][j]==Double.NaN) {
         test[i][j]=0.0;
     }
  }
}


Weet iemand wat ik fout doe?

Engineering is like Tetris. Succes disappears and errors accumulate.


  • Cyphax
  • Registratie: November 2000
  • Laatst online: 14:02

Cyphax

Moderator LNX
Misschien lukt het beter met isNaN?
http://www.powermct.co.kr/teched/ecma/isnan.html :)

Saved by the buoyancy of citrus


  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
Toevallig heet het in javascript ook isNaN(), maar eigenlijk had je deze link moeten hebben: :)
http://java.sun.com/j2se/.../lang/Double.html#isNaN()

  • Cyphax
  • Registratie: November 2000
  • Laatst online: 14:02

Cyphax

Moderator LNX
MrBucket schreef op vrijdag 04 maart 2005 @ 11:48:
[...]

Toevallig heet het in javascript ook isNaN(), maar eigenlijk had je deze link moeten hebben: :)
http://java.sun.com/j2se/.../lang/Double.html#isNaN()
Ik zocht eigenlijk gewoon op isNaN, ik had zo snel niet het onderscheid gemaakt... mijn fout :P

Saved by the buoyancy of citrus


  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 10-05 16:41

Nick_S

++?????++ Out of Cheese Error

Aangezien isNaN alleen op Doubles werkt en niet op doubles, zul je waarschijnlijk nog:

code:
1
2
3
4
final Double dbl = new Double(test[i][j]);
if (dbl.isNaN()) {
test[i][j]=0.0;
}


nodig hebben.

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Java is toch IEEE compliant? Dan kun je gewoon
Java:
1
if( test[i][j] != test[i][j] ) ... 
doen.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
MSalters schreef op vrijdag 04 maart 2005 @ 12:09:
Java is toch IEEE compliant? Dan kun je gewoon
Java:
1
if( test[i][j] != test[i][j] ) ... 
doen.
Geldt dit alleen voor NaN's, dat (x == x) false oplevert, of ook voor bijv. infinity-waarden? Ik meen me te herinneren dat het een beetje een geklooi was, maar ik weet niet zeker of dit alleen op NaNs van toepassing was.

Overigens heeft Double ook een static isNaN, dus je kunt voor een double d ook Double.isNaN(d) schrijven, dan hoef je geen nieuw object aan te maken.

--edit--
Uit de documentatie van Double.equals():
If d1 and d2 both represent Double.NaN, then the equals method returns true, even though Double.NaN==Double.NaN has the value false.
If d1 represents +0.0 while d2 represents -0.0, or vice versa, the equal test has the value false, even though +0.0==-0.0 has the value true.
Volgens mij impliceert ((x == x) == false) idd dat x dan NaN is.

[ Voor 27% gewijzigd door MrBucket op 04-03-2005 12:30 ]


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 13:27

Robtimus

me Robtimus no like you

Uit de source van Java 1.4.2_06:
Java:
1
2
3
    static public boolean isNaN(double v) {
    return (v != v);
    }

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 07-04 15:08
bedankt voor de hulp!
Ik heb het nu op kunnen lossen.
Ik had het eerst anders gedaan, door te kijken of het getal tussen -infinity en infinity lag, maar dit is beter.

Engineering is like Tetris. Succes disappears and errors accumulate.

Pagina: 1