C言語のプログラムに関することで質問です。
C言語のライブラリを利用したプログラムのことで質問なのですが、座標xとyの成分から、ベクトルの角度(t)と大きさ(r)を求めるプログラムを作りました。しかし、このままのプログラムだと、ある場合のときに限り、正しい値が返されなくなるらしいのですが、それはどのような場合で正しい値が返されなくなってしまうのかを教えてください。また、正しい値がでるようにするにはどこをどう直したらよいのでしょうか?
自分でも考えてみたのですが、分からず困っています。分かる方どうかよろしくお願いいたします。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define square(x) ((x) * (x))
//ベクトルの角度θを返す関数
double theta(double x, double y)
{
return atan(y / x);
}
//ベクトルの大きさを返す関数
double radius(double x, double y)
{
return sqrt(square(x) + square(y));
}
int main(int argc, char **argv)
{
double x, y; //x, yは座標
double t, r; //t, rは極座標
if(argc == 3 && (x = atof(argv[1])) && (y = atof(argv[2])))
{
t = theta(x, y); //極座標tを計算
r = radius(x, y); //極座標rを計算
//ベクトルの角度と大きさを表示
printf("t = %f, r = %f\n", t, r);
}
return 0;
}