組込みC > atan2() > xが0.0の戻り値 > 3.40282346E+38 > 定義域エラーが発生した場合、関数は処理系定義の値を返す
とある16bitのMCU用開発環境 (C言語)
用意されたmath.h
のatan2()を使用。
関連 http://www.c-tipsref.com/reference/math/atan2.html
tan^{-1}(y/x)
ここで、xが0.0の時の処理はどうなっているか。
ideone
#include <stdio.h>
#include <math.h>
int main(void) {
printf("%f\n", atan2(0.0, 0.0));
return 0;
}
0.000000
使用中の組込みC
3.40282346E+38
が返るようになっていた。
結果としてprintf()表示した時にinf
となる。
使用している機器が故障して、データが取得できなくなった場合などはxが0.0になる場合がある。
その時に使用中の組込みCのライブラリでは、きちんと対処をしないとinf
になるようだ。
他の開発環境・ライブラリの場合でx=0.0のatan2()戻り値がどうなるかは未調査。
atan2()を使う前に常にx=0.0のチェックを入れるのは安全ではある。
ATAN2(3)
http://man7.org/linux/man-pages/man3/atan2.3.html
RETURN VALUE の項目に色々な場合の戻り値がある。
If y is +0 (-0) and x is -0, +pi (-pi) is returned.
If y is +0 (-0) and x is +0, +0 (-0) is returned.
使用中の組込みCではこのような戻り値ではない。
教えていただいた事項
@SaitoAtsushi さんのコメントにて処理系定義の値が返っているようであることが分かりました。
情報感謝です。
Author And Source
この問題について(組込みC > atan2() > xが0.0の戻り値 > 3.40282346E+38 > 定義域エラーが発生した場合、関数は処理系定義の値を返す), 我々は、より多くの情報をここで見つけました https://qiita.com/7of9/items/54ba0a9f6e4a778d7ace著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .