我已經(jīng)包含了一個演示我的問題的片段?;旧咸幚斫o了我這個錯誤:map(NaN, -3, 3, -125, 125) called, which returns NaN (not a number)我理解此消息的方式是,map 函數(shù)返回 NaN,并且由于它返回一個浮點數(shù),我應(yīng)該能夠使用 Float.NaN 進行檢查。正如所演示的,盡管在創(chuàng)建檢查它的 if 語句時我沒有得到任何結(jié)果。我嘗試將 if 語句放在帶有相應(yīng)變量的 map 函數(shù)之前,但沒有命中。我想知道是否有人可以向我解釋這種現(xiàn)象并幫助我調(diào)試代碼。這可能是我正在監(jiān)督的一些小事情,但它讓我發(fā)瘋。提前致謝片段:void setup() { size(500, 500);}void draw() { background(0);}class Complex { private float re, im, r, p; Complex(float real, float imag) { re = real; im = imag; r = sqrt(sq(re)+sq(im)); //radius p = atan2(im, re); //phase } Complex Div(Complex b) { Complex a = this; float real = (a.re*b.re+a.im*b.im)/(sq(b.re)+sq(b.im)); float imag = (a.im*b.re-a.re*b.im)/(sq(b.re)+sq(b.im)); return new Complex(real, imag); } Complex Ln() { float real = log(r); float imag = p; return new Complex(real, imag); } Complex LogBase(Complex b) { Complex a = this; return a.Ln().Div(b.Ln()); } Complex Scale(float scale, int dim) { float real = map(re, -scale, scale, -dim, dim); float imag = map(im, -scale, scale, -dim, dim); if (real == Float.NaN || imag == Float.NaN) { print("\nHit!"); } return new Complex(real, imag); }}void keyPressed() { float d = width/4; for (float z = -d; z<d; z++) { for (float x = -d; x<d; x++) { Complex c = new Complex(1, 5); c = c.LogBase(new Complex(x, z)); c.Scale(3.0, int(d)); } }}
1 回答

翻閱古今
TA貢獻1780條經(jīng)驗 獲得超5個贊
看來誤解是圍繞與 NaN 的比較而產(chǎn)生的。任何與 NaN 的等價比較 (==) 都將返回 false。即使與自己相比也是如此。要檢查 NaN 值,您可以使用 Float.isNaN 方法。
例如
System.out.println("(Float.NaN == Float.NaN) -> " + (Float.NaN == Float.NaN)); System.out.println("(Float.isNaN(Float.NaN)) -> " + (Float.isNaN(Float.NaN)));
產(chǎn)生:
(Float.NaN == Float.NaN) -> false (Float.isNaN(Float.NaN)) -> true
添加回答
舉報
0/150
提交
取消