Cでもルート関数があったような気がしたのですが、
C++にもルート関数はありますか?
C++のルート関数を教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

Cとおなじ sqrt() という関数が使えるはずです。


コンパイルするとき、 -lm オプションをつけないとエラーが出るかもしれません。
math.h をインクルードして下さい。
    • good
    • 0
この回答へのお礼

早速のご返答有り難うございました。
ルート関数が使用できました。
C++の本の中身を4冊ぐらい探しましたが、見つかりませんでした。
とても助かりました。

お礼日時:2002/02/08 21:16

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QC言語で電卓を作成する。

C言語を用いて三項まで計算できる電卓を作りたいのですが、どうも上手くいきません。
四則演算(+、-、×、÷)の優先順位を用いたプログラミング方法が分かりません。
以下に自分で作成したソースを添付します。
このソースに修正や追加して3項までの四則演算できるプログラミングを教えていただけますか?
宜しくお願いします。

#include <stdio.h>

int main(void)
{
int answer;/*答え*/
int x,y,z;/*x=第一項,y=第二項,第三項*/
char op1,op2;/*演算子1、演算子2*/

while(1){
printf("式を入力してください\n");
printf("式:");
scanf("%d %c %d %c %d" ,&x,&op1,&y,&op2,&z);

if((op1=='+'|'-'|'*'|'/') && (op2=='+'|'-'|'*'|'/')){

switch(op2){
case '+':
answer=y+z;
break;

case '-':
answer=y-z;
break;

case '*':
answer=y*z;
break;

case '/':
if(z==0){
printf("ERROR\n");
return 0;
}
answer=y/z;
break;

default:
printf("ERROR\n");
return 0;
}
switch(op1){
case '+':
answer=x+answer;
break;

case '-':
answer=x-answer;
break;

case '*':
answer=x*answer;
break;

case '/':
if(y==0){
printf("ERROR\n");
return 0;
}
answer=x/answer;
break;

default:
printf("ERROR\n");
return 0;
}
printf("答え:%d\n",answer);
}

else {
switch(op1){
case '+':
answer=x+y;
break;

case '-':
answer=x-y;
break;

case '*':
answer=x*y;
break;

case '/':
if(y==0){
printf("ERROR\n");
return 0;
}
answer=x/y;
break;

default:
printf("ERROR\n");
return 0;
}
printf("答え:%d\n",answer);
}

}
}
左辺に×、÷が来ても優先的に計算されません。

C言語を用いて三項まで計算できる電卓を作りたいのですが、どうも上手くいきません。
四則演算(+、-、×、÷)の優先順位を用いたプログラミング方法が分かりません。
以下に自分で作成したソースを添付します。
このソースに修正や追加して3項までの四則演算できるプログラミングを教えていただけますか?
宜しくお願いします。

#include <stdio.h>

int main(void)
{
int answer;/*答え*/
int x,y,z;/*x=第一項,y=第二項,第三項*/
char op1,op2;/*演算子1、演算子2*/

while(1){
printf("式を入力してください\n...続きを読む

Aベストアンサー

どこまでの道具が使えるのかどうかにはよりますが、雰囲気からすれば、2項の「電卓」はコードがあるようですね。
これを、3項に拡張する場合、だらだらとコードを付け加えてゆくよりは、今ある部分を機能的に独立させる方が見通しは良くなります。

たとえば、こんな感じ。



int calc2term(int a, char op, int b)
{
// a op b の値を返す
}

int comp_op(char op1, char op2)
{
// op1 と op2 優先順序を確認する
// op1 が優先なら、-1 を
// op2 が優先なら、1 を
// 優先順序が同じなら 0 を返す。
}


int main()
{
int answer;

// ここまでで、z, y,z op1, op2 が入力されたものとする

if (comp_op(op1, op2) == 1) // 特別扱いするのは、op2 のほうが優先順序が高いときだけ
{
answer = calc2term(y, op2, z);
answer = calc2term(x, op1, answer);
// op2 のほうが優先順位が高いので x op1 (y op2 z) を計算する。
}
else // それ以外の時は、op1 op2 の優先順序が同じ時も含めて、左から順に計算すればいい
{
answer = calc2term(x, op1, y);
answer = clac2term(answer, op2, z);
// (x op1 y) op2 z を計算する
}

// answer の値を表示する。

return 0;
}

どこまでの道具が使えるのかどうかにはよりますが、雰囲気からすれば、2項の「電卓」はコードがあるようですね。
これを、3項に拡張する場合、だらだらとコードを付け加えてゆくよりは、今ある部分を機能的に独立させる方が見通しは良くなります。

たとえば、こんな感じ。



int calc2term(int a, char op, int b)
{
// a op b の値を返す
}

int comp_op(char op1, char op2)
{
// op1 と op2 優先順序を確認する
// op1 が優先なら、-1 を
// op2 が優先なら、1 を
// 優先順序が同じなら 0 を返...続きを読む

QC言語でルートって・・・・

簡単な質問かもしれませんが、C言語初心者なので、よろしくお願いします・・・。

C言語で、ルートの演算子ってありますか??

例えばプログラム上で、変数Aを使って”ルートA”を計算したい時は、どうしたらいいのでしょうか・・・

分かる方、お願いします・・・

Aベストアンサー

C言語で平方根を求める場合ライブラリ関数のsqrt()を使用します。

#include <math.h>

double sqrt(double x);

Q三角関数の記述の仕方

タイトルそのまんまなんですが、三角関数はC言語ではどのように記述すればいいでしょうか?
角度にラジアン表記でπ(パイ)を使いたいんですが、その表記方法もわかりません。
僕の持っている本に載ってなかったので質問させていただきました。
よろしくお願いします。

Aベストアンサー

C言語で三角関数を使うためには、math.h をインクルードする必要があります。使い方は例えば、こんな感じです。

#define M_PI 3.14159265358979 /* 円周率 */

double x, y, theta;

theta = M_PI / 4.0;
x = cos(theta); /* sin,cos,tanの引数は弧度法の角度です。*/
y = sin(theta);

πは上記の例のように自分で定義して使ってください。

QVisualC++ テキストファイルなどの取り込み方

現在、Visual C++ 2008 Express Editionを使って
入門書の「ファイルの入出力」部分を勉強中です。

そこで、読み込むべきテキストファイルを作成したまではいいのですが
プロジェクトにそのファイルを追加する方法がわからずに困っています。

プロジェクト名がサンプルの場合
Visual Studio 2008\Projects\サンプル\サンプル
のディレクトリにファイルをコピーすれば
問題なくファイルを読み込むことはできました。

しかし、毎度毎度自分でコピーするのは手間がかかるので
Visual C++のソフト上からファイルを追加したいのですが
それにはどうしたらよいでしょうか。
教えてください。

Aベストアンサー

(Visual C++ 2008 Express Edition を使ったことがないのですが・・)

>プロジェクトにそのファイルを追加する方法がわからずに困っています。

 ・「プロジェクトにそのファイルを追加」する必要はないと思います。

>ソースコードで指定した名前のテキストさえ読み込むことができればできればよいのですが。

☆フルパスでテキストファイルを指定すれば・・。

 例) fp = fopen( "D:\\Work\\Data\\sample.txt", "r" );

 ここで注意するのは、\ がエスケープ文字であることから、\\ と書きます。

 ・フルパス
 ・エスケープ文字   でそれぞれ検索しご確認下さい。

QLNK2019: 未解決の外部シンボルのエラーが出る

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自キャラのデータ
Point2D g_jikipos = {40, 400};//自キャラの座標

//画像ハンドル
int g_jikiimage[11];

//色々なファイルの読み込み
int LoadFiles(){
//画像ファイル読み込み
if(LoadDivGraph("media\\player01.bmp",
11,11,1,64,64,g_jikiimage) == -1) return -1;

return 1;
}


 mymain.h
//他から呼び出させるMyMainの関数
void MyMain();
int LoadFiles();


 myhelper.h(サンプルなので打ちミスはない)
#include "DxLib.h"
#include <limits.h>
#include <math.h>

//構造体宣言
//座標またはベクトルを記録する構造体
struct Vector{
float x,y;
};
typedef Vector Point2D;
//線を記録する構造体
struct Line2D{
Point2D startpos, endpos;
float katamuki;//傾きをラジアン値で記録
Vector speed;//移動している場合は速度をセット
};
//球体を記録する構造体
struct Ball2D{
Point2D position;
float hankei;//半径
};
//四角形を記録する構造体
struct Rect2D{
Point2D lefttop;
Point2D rightbottom;
float width;
float height;
};


//ライブラリ関数
Point2D PosInView(Point2D in);
int XInView(float inx);
int YInView(float iny);
void ScrollToLeft(float jikiposx);
void ScrollToRight(float jikiposx);
void ScrollToUp(float jikiposy);
void ScrollToDown(float jikiposy);
void DrawLineInView(float x1, float y1, float x2, float y2, int Color, int Thickness);
void DrawCircleInView(float x, float y, float r, int Color, int FillFlag);
void DrawAnimation(float x, float y, double ExtRate, double Angle,int TurnFlag,
int *imgarray, int allframe, float fps);
//ベクトル関数
Vector CreateVector(Vector in, float veclen);
Vector AddVector(Vector v1, Vector v2);
Vector SubVector(Vector v1, Vector v2);
Vector AddVectorInFrameTime(Vector pos, Vector speed);
Vector AddVectorInFrameTime2(Vector pos, Vector speed, Vector accel);
Vector Normalize(Vector in);
Vector RotateVector(Vector in, float radian);
float VectorLengthSquare(Vector in);
float DotProduct(Vector v1, Vector v2);
float CrossProduct(Vector v1, Vector v2);
void SetLine2DKatamuki(Line2D *in);
void DrawLine2D(Line2D in, int Color, int Thickness);
void DrawBall2D(Ball2D in, int Color, int Fill);
//当たり判定関数
bool HitTestLineAndBall(Line2D linein, Ball2D ballin);
bool IsPointAtLineFace(Line2D linein, Point2D ptin);
bool HitTestLineAndLine(Line2D line1, Line2D line2);
bool HitTestBallAndBall(Ball2D a, Ball2D b);
bool HitTestPointAndBox(Rect2D rect, Point2D pt);
//タイマー関数
void SetSimpleTimer(int idx, int time);
int GetPassedTime(int idx);


//グローバル変数
extern float g_frametime;
extern Rect2D g_framerect;//画面領域(当たり判定)
extern Point2D g_current_field_pos;//現在の左上座標
extern Rect2D g_stagesize;//ステージサイズ

//定数宣言
const float ZEROVALUE = 1e-10f;
const float PIE = 3.1415926f;
const int SCROLL_LIMIT = 200;
----------------------------------------------------------------
 エラー内容
1>myhelper.obj : error LNK2019: 未解決の外部シンボル "void __cdecl MyMain(void)" (?MyMain@@YAXXZ) が関数 _WinMain@16 で参照されました
1>C:\Documents and Settings\Owner\My Documents\Visual Studio 2008\Projects\my\Debug\my.exe : fatal error LNK1120: 外部参照 1 が未解決です
1>my - エラー 2、警告 0
ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ
----------------------------------------------------------------
画像を貼り付けときます
(見えにくい場合→http://www.dotup.org/uploda/www.dotup.org154142.jpg.html)
初心者なのでわかりやすくお願いします

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自...続きを読む

Aベストアンサー

ファイル構成から推測するに
mymain.cpp というファイルに
void MyMain(void) {
// ここに処理を書く
}
という関数が必要なようです。

Qfloat型とdouble型の変数の違いを教えてほしいです

float型とdouble型の変数の違いを教えてほしいです
2Dゲームを作っててdoubleの変数を使ってたんですが使ってはだめだと先輩に言われたんです。
理由を聞いたら、先生が「doubleは使わないほうがいい」と言われたらしくてちゃんとした理由がわかりませんでした。
それを知って何をするということではないんですが、気になって調べても出てこなかったので質問させてください。
まだゲーム作りを始めたばっかりでぜんぜん詳しくないですが教えてくれたら助かります。

Aベストアンサー

doubleとfloatでは、精度が違い、そのためメモリに占める大きさも違います。
また、一般的には、桁が多いとその分計算時間がかかります。
ですから、精度が必要ない場面では、floatを使う、というのも一つの考えかたです。

ですが、実際には「一概に言えない、処理系依存」です。

以前は全てCPUで計算していたので、精度=計算量でした。
しかし、最近では浮動小数点演算専用の回路が付いているケースが多く、計算時間は同じだったり、doubleに変換が必要でその分floatの方が遅かったり、floatでの演算はより高速にできたり、と様々です。
32bitCPUでは、32bitのfloatの方が扱いやすいでしょうが、64bitCPUでは64bitのdoubleの方が扱いやすいかもしれません。
Cのmath.hで使える標準関数はdouble型のものがほとんどです。三角関数は2Dのゲームでも使う機会が多いのではないでしょうか。sinもcosもdouble型です。内部演算は当然doubleですので、変数にfloatを使ったからと早くはならず、むしろfloat型の変数に入れるときに暗黙の型変換が発生する分遅くなる可能性もあります。

そういった背景を考え検討した結果、floatを使う方がよい、と判断したのならいいのですが、「先生に言われた」では理由になりません。
聞けるのなら、その先生に理由を聞いてください。真意がわからないうちは、鵜呑みしないことです。

doubleとfloatでは、精度が違い、そのためメモリに占める大きさも違います。
また、一般的には、桁が多いとその分計算時間がかかります。
ですから、精度が必要ない場面では、floatを使う、というのも一つの考えかたです。

ですが、実際には「一概に言えない、処理系依存」です。

以前は全てCPUで計算していたので、精度=計算量でした。
しかし、最近では浮動小数点演算専用の回路が付いているケースが多く、計算時間は同じだったり、doubleに変換が必要でその分floatの方が遅かったり、floatでの演算はより高速...続きを読む


人気Q&Aランキング