以下のステートメントを実行している間、コンソールに誤った値が表示されます。私は初心者のように立ち往生した。表示Object-cでTan(90)の値が未定義にならない
NSLog(@"tan(90)=%f",tan(90*M_PI/180.0);
出力:日焼け(90)= 16331239353195370.000000
以下のステートメントを実行している間、コンソールに誤った値が表示されます。私は初心者のように立ち往生した。表示Object-cでTan(90)の値が未定義にならない
NSLog(@"tan(90)=%f",tan(90*M_PI/180.0);
出力:日焼け(90)= 16331239353195370.000000
結果は正しいです。 M_PI/2.0
はdouble
であり、π/ 2に非常に近いが、正確にはπ/ 2(πはdouble
で正確に表すことはできない)ではない。したがって、その接線は非常に大きいですが、無限ではありません。
schmitdt9's link to the tan
docsは有用であるが、重要な注意点は、この一つである:
関数はπで数学極(1/2 + n)を有します。一般的な浮動小数点表現はπ/ 2を正確に表すことができないため、ポールエラーが発生する引数の値はありません。
「極」は「関数が無限大の入力」を意味します。
"どのように私はtan(90)をコンソールで定義されていないものとして表示するべきですか?"という答えには特別なケースが必要です。 0-360に渡されたものを正規化し、それが90か270かどうかを確認します。その場合はinfinite
を、それ以外の場合はtan
としてください。
tan
は、C関数で、このページを参照してくださいhttp://en.cppreference.com/w/cpp/numeric/math/tan 特にそれが言われている。
ドメイン場合エラーが発生し、実装定義の値が返される (NaNがサポートされている場合)
だから私は数16331239353195370.000000は特別なマクロINFINITY
あり、この場合に
編集インフィニティは を印刷について
をインフィニティ/エラーを意味と仮定して、あなたは
NSLog(@"%f", INFINITY);
出力を行う場合
inf
予想される結果は何ですか?文字列は 'NSLog(@" tan(90)=%f "、tan(90.0);' – shallowThought
'を出力することを示唆しています(If/Elseを使って実行する必要があります) – pgr
どうしてですか? – shallowThought