2017-03-24 11 views
0

私は乱数xを返すために乱数ジェネレータを使用します。他の計算にはxが必要なので、xは数字でなければなりません。私がisNaNメソッドを使用したことを確認する。したがって、私のループは、xが数字ではないので、長い間実行されるべきです。 しかし、ループは時々(ランダムに) "NaN"を返すので、isNaNメソッドは適切に機能していないようです。 あなたの誰かが賢いアイデアを持っているのですか?isNaNメソッドは、noneに対してtrueを返しません。

do { 
    do { 
    a = 2.0 * Math.random() - 1; 
    b = 2.0 * Math.random() - 1; 
    q = a * a + b * b; 

    } while (q === 0 && q >= 1) 

    p = Math.sqrt((-2 * Math.log(q))/q); 
    x = a * p; 


} while (x <= -5.4 && isNaN(x)) 

return x; 
+1

他のすべての言語と同じように動作する場合、 'isNaN'は数値でないものに対してはtrueを返しません。これは文字列 'NaN'に対して真を返します。 'null'は' NaN'ではないので、falseを返します。 – Carcigenicate

+2

'while(q === 0 && q> = 1)' - それとも? (また、すべての計算には何がありますか?xとyの間の乱数を返すのは普通1ライナーですが、関数の実際の出力はどうですか? – nnnnnn

+0

これはnull、0/0、誰かを見つけるためにconsole.logを実行します.... –

答えて

-2

通常、isNaN()関数はTrueまたはFalseを返す必要があります。あなたは以下のチェックすることができ、

function isNumber(num) 
{ 
    return (!isNaN(num)) : true : false); 
} 

をそして:

var testResult = isNaN(num) 
console.log(testResult); 

そうでない場合、あなたは以下の作成することで、独自の抽象関数を作成することができます。しかし、あなたはこれを書いてそれをテストすることができ

var checkNumber = isNumber(var); 
+0

良い答えです。しかし別の時。この答えはこの問題を解決しようとはしませんでした。 –

+0

'var'は予約語afaikです。また、これはコンパイルされますか?連鎖した ':'は何ですか?それは私のための新しいものです。それが三元でなければならない場合、それは冗長です。 – Carcigenicate

+0

この例はあまりにも複雑ではないので、私はそれが間違っていると考えています。 – Carcigenicate

0

コードはあなたが指導しているものを正確に実行しています。あなたの外側の式

while (x <= -5.4 && isNaN(x)) 

はANDではなく論理ORを使用する必要があります。

isNaN(x)== trueの場合、x < = -5.4 == false; false & & true == falseです。

logical operators and what they doにブラッシュアップする必要があります。

関連する問題