トップページ⇒tech
1001コメント336KB

【初心者歓迎】C/C++室 Ver.28【環境依存OK】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/06/09(金) 10:08:51
エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。
※sageは禁止です。
【前スレ】
【初心者歓迎】C/C++室 Ver.27【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1147183708/
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0153デフォルトの名無しさん2006/06/14(水) 16:45:58
>>152
返答遅くなってすみません!!どうしても外せない用事ができてしまって
外に出てしまいました。今出先のノートパソコンからやってるのですが、
分割コンパイルという言葉に聞き覚えはありません…
帰ってみてぐぐればわかるでしょうか?本当申し訳ありません。
0154デフォルトの名無しさん2006/06/14(水) 18:20:51
>>153
なんかとてつもなくわかりにくいような気もするが置いとく

・コンパイル時の動作
 とりあえずbcc32 toriaezu.cpp matrix.cppと打ち込んだ場合、
 コンパイラはまず最初にtoriaezu.cppとmatrix.cppをコンパイルしてtoriaezu.objとmatrix.objを作成する(この時点でエラーがあればコンパイルエラーと出る)
 次に、リンカ(ilink32.exe)を呼び出して、CUIアプリケーション用スタートアップモジュール(C0X32W.OBJ)や標準関数ライブラリ(CW32.LIB)と
 先にコンパイルしたtoriaezu.objとmatrix.objをリンクしてtoriaezu.exeを吐き出させる。

・ヘッダファイルとソースファイル(コンパイル単位)
 ヘッダファイルは通常、クラスや関数の宣言のみで単独でコンパイルや他のソースファイルにインクルードしても実体は含まれない。(テンプレートは通常ヘッダに実装書くけど置いとく)
 当然、宣言だけだと呼び出す関数がそのコンパイル単位に存在しないのでそのクラスの実装(matrix.obj)から関数を呼び出す必要がある。

ついでにBCC5.5.1のライブラリファイルとかの資料
http://support.borland.com/entry!default.jspa?categoryID=90&externalID=4323

混乱するかも知らん(;´Д`)
0155デフォルトの名無しさん2006/06/14(水) 19:54:30
先日、VisualC++EEをインストールしたんですが
環境変数設定で間違えて$(PATH)の値を消してしまって困っています
$(PATH)○○
となるはずですけど○○の部分がわかりません
変な話で申し訳ありませんが教えてください
どうかお願いします
0156デフォルトの名無しさん2006/06/14(水) 20:00:55
通りすがりですが、、

・複数のソースコードからなるソフトをひとつのexeファイルにまとめることができる。
 中規模以上のソフトは通常複数のソースファイルで構成されている。
 (もしこの機能がなかったら、たとえばLINUXカーネルのソースコードは、、、、、、)
 ひとつのソフトを分割してコンパイルすることになるので、コンパイル結果を結合する
 必要がある、リンカはこの結合を行い、結合されたソフトの実行開始アドレスなどを
 exeファイル内に設定する。
 (ちなみに、単一のCソースからなるソフトでも、リンカはスタートアップ時に初期化のために
  実行されるCRTなどを、コンパイル結果に結合して実行ファイルを作成している)

・C言語(コンソールプログラム)は、int main()から実行が開始される。
 (実際にはCRT(C0X32)の中のスタートアップルーチンからmainを読んでいるのですが、、、)
 よって、mainがないとリンカさんが困ってしまう。
 Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照)

そしてふりだしへ、、、
0157デフォルトの名無しさん2006/06/14(水) 21:27:19
どうでもいいけどこのスレで_mainが未解決のエラーが出ると書かれたら、
十中八九WinMainから始まっているのに-Wを指定していなかったというオチ。
0158デフォルトの名無しさん2006/06/14(水) 21:40:38
>>157
不幸なことに今回はレアケースなのだよ
つまり10回のうち1、2回というか、それ以上
多分100万人に1人の…
0159デフォルトの名無しさん2006/06/14(水) 22:03:17
main.c hoge.c hoge.hをコンパイルする場合
bcc32 -etest *.h *.c
0160デフォルトの名無しさん 2006/06/14(水) 23:59:17
C言語での質問なんですが
関数定義、宣言の時
例えば
static void func(void){}と
void func(void){}とするのでは
何が違うんでしょうか
どなたか教えて頂きたいです
0161デフォルトの名無しさん2006/06/15(木) 00:03:59
>>160
別のソースファイルから呼び出すことができるかどうかが違う。
0162デフォルトの名無しさん2006/06/15(木) 00:09:21
>>160
前者は非公開、後者は他ソースに公開。
例えば同じ名前の関数が他ソースにあるときに問題になる。

最適化の観点からは、
gccなら前者ならインライン展開する可能性を期待できる。
iccなら事実上殆ど差がない。
0163デフォルトの名無しさん2006/06/15(木) 00:24:07
>>156
例えばコマンドラインから、bcc32 hoge.h hoge1.c hoge2.c  ...でできるはず

>>159
*.h *.c はディレクトリ内の拡張子 .h .c の全てのファイルをコンパイル対象にしてしまう。
これやるぐらいなら、makefile の作り方を覚えた方がいい。
初心者の内は自分がどのファイルをコンパイルしているのか、
意識的に考えながらやった方がいい。
0164デフォルトの名無しさん2006/06/15(木) 03:31:01
初歩的な事で申し訳ないのですが……次のソースをコンパイルして実行すると、「セグメンテーション違反」と言われて怒られます。何が悪いのでしょう?

#include <stdio.h>

int double_malloc(double *target, int number) {
if ((target = (double *)malloc(sizeof(double) * number)) == NULL ) {
puts("Memory Unallocatable in dounle_malloc()\n") ;
return (-1) ;
}
return (0) ;
}

int main(void) {

int number ;
double *test ;

number = 2 ;
double_malloc(test, number) ;
test[0] = 1.0 ;
test[1] = 2.0 ;
printf("%f\n", test[0]+test[1]) ;
free(*test) ;
return (0) ;

}

OSはVineLinux3.2、コンパイラはOSについてきたgccを使っています。CPUはPentium4 2.66GHz、総メモリは1Gでコンパイル後も650MB程度の空きがありました。
0165デフォルトの名無しさん2006/06/15(木) 03:36:27
Cはよく分からないから勘で言うけどfree()はポインタ渡すんでない?
0166デフォルトの名無しさん2006/06/15(木) 03:40:36
double_malloc の target が double * なのがそもそも問題外。
0167デフォルトの名無しさん2006/06/15(木) 07:05:12
パラメータをdouble**にするか戻り値をdouble*にすれ。
0168デフォルトの名無しさん2006/06/15(木) 12:43:36
>>164
1. 関数の中で引数(の変数)に代入しても、渡した側の変数の値は変更されない。
2. free には malloc が返してきた値と同じ値を渡す必要がある。
 (例) a = malloc(...); としたなら free(a)。 free(*a) や free(a+1) はダメ。

C なら double* double_malloc(int n) として、 test = double_malloc(number) とするか、
int double_malloc(double** ptr, int n) として、 double_malloc(&test, number) とする。
(後者の場合 *ptr = (double*) malloc(...); として値を返す)

加えて C++ なら int double_malloc(double* &ptr, int n) として、 double_malloc(test, number) とも書ける。
(この場合 ptr = (double*) malloc(...); でOK)
0169デフォルトの名無しさん2006/06/15(木) 12:45:49
いや、C++ならそもそもmalloc()なんか使うなよ、と。
0170デフォルトの名無しさん2006/06/15(木) 12:54:37
なんで?
0171デフォルトの名無しさん2006/06/15(木) 13:05:00
俺は
#define MBYTE (1024 * 1024)
char Var[MBYTE];
こうやったらエラーでたからしかたなくmalloc()使ってる…。
0172デフォルトの名無しさん2006/06/15(木) 13:05:35
>>170
単一オブジェクトの動的生成なら new 使ったほうがよくて、
動的配列なら vector 使ったほうがいいから。
0173デフォルトの名無しさん2006/06/15(木) 13:07:51
>>172馬鹿?
01741722006/06/15(木) 13:10:22
>>173
自分ではそんなつもりないけど、何か変なこと言ったか?
0175デフォルトの名無しさん2006/06/15(木) 13:25:51
>>172
俺もnewかコンテナ使うけど、コンテナの機能を使わない場合、malloc()でもいいんじゃね?
ビルトインタイプなんだし。
0176デフォルトの名無しさん2006/06/15(木) 13:30:00
まあnew/deleteとmalloc/freeをごっちゃにするようなトンチキなことさえしなきゃいいんじゃね
0177デフォルトの名無しさん2006/06/15(木) 13:41:41
mallocすればreallocも使える!
0178デフォルトの名無しさん2006/06/15(木) 13:48:24
vectorよりmallocの方が、微妙に速い・・
0179デフォルトの名無しさん2006/06/15(木) 13:53:00
>>178
微妙なのかよw
0180デフォルトの名無しさん2006/06/15(木) 14:39:31
そんなにクリティカルに速度を気にする奴は、
そもそもmallocなど使わずに、環境依存のメモリ確保のシステムコールなどを使う。
0181デフォルトの名無しさん2006/06/15(木) 14:53:15
結論、Cとの互換性が必要な場合と既存のソースの流用の場合を除いて、
C++で積極的にmalloc()を使用する理由はない。
0182デフォルトの名無しさん2006/06/15(木) 15:06:32
>>172
問題になるのは、コンストラクタ/デストラクタの呼び出しの有無。

呼び出されなければならない場合、new/deleteを使用するべき。
コンストラクタ/デストラクタがなければ好みの問題。
0183デフォルトの名無しさん2006/06/15(木) 16:08:58
結局>>173が馬鹿だったっていうオチ?
0184デフォルトの名無しさん2006/06/15(木) 16:21:28
>>180
システムコールの方が c のライブラリの malloc より速い OS って
例えばどんなのがある?
01851642006/06/15(木) 17:05:49
>>167
>>168

無事解決しました。ありがとうございます。
0186デフォルトの名無しさん2006/06/15(木) 17:17:11
>>184
mallocがそのシステムコールを呼んでいるだけだったとしても、
インライン展開されない限り、mallocを呼ぶオーバーヘッドがかかる。
0187デフォルトの名無しさん2006/06/15(木) 17:20:44
>>186
理論上、1度だけ大きな領域を確保するときにはそうだね。

というような特殊事例でのバカ話は別として、
実際にはどのOSのシステムコールが、そのOSの標準的なCランタイムの
malloc より高速なの?
0188デフォルトの名無しさん2006/06/15(木) 17:22:53
ちなみに Windows はこうだ↓
http://www.google.co.jp/search?hl=ja&q=%E9%80%9F%E5%BA%A6+HeapAlloc+malloc&lr=

malloc の方がはるかに高速。Linux だって sbrk より malloc の方が速いだろ。
0189デフォルトの名無しさん2006/06/15(木) 17:33:10
>>188
まあ、そういう工夫によって、OS依存のAPIより早いという場合はあるね。
iostreamだって、内部でバッファ処理をしていて、
OSのAPIを呼び出して、ファイルに対して1バイトずつアクセスするより早いことがあるかもしれないし。
0190デフォルトの名無しさん2006/06/15(木) 18:13:53
>>188
でも近頃のVisual C++のmallocは単にHeapAllocを呼ぶようになっていたと思う。
0191デフォルトの名無しさん2006/06/15(木) 20:26:52
たぶん誤解している人がいる
ヒント:仮想記憶空間
0192デフォルトの名無しさん2006/06/15(木) 22:33:21
プログラム的には動的に割り当ててるけど、
実はプロセス起動時にまるっとある程度確保されてる場合もある
0193デフォルトの名無しさん2006/06/15(木) 23:16:49
、、、

システムにメモリを要求することはかなりかなり高価な処理であるから,
mallocの呼び出しごとにそれをするのは損である。
、、、
と古典には書かれている。
0194デフォルトの名無しさん2006/06/15(木) 23:28:44
>>193
どのレスに対するコメントか知らんが、

「だからどうした」
0195デフォルトの名無しさん2006/06/16(金) 00:17:27
多倍長整数のライブラリで MS VC++2005 で使える C++ でかかれたライブラリが
欲しいのですが、お勧めはありますか?

下のを試したんですが、VC++2003以降でいくつか古いインクルードヘッダが
なくなったせい(だと思うんですが)で、コンパイルできません。
ttp://www.vector.co.jp/soft/win95/prog/se059033.html
0196デフォルトの名無しさん2006/06/16(金) 00:33:47
>>195
これ使ってみて。
boost sandbox bigint
0197デフォルトの名無しさん 2006/06/16(金) 03:00:28
>>161さん
>>162さん
遅レスですいません
レスありがとうございます。
そういう意味だったんですか。
わかりました。ありがとうございました。
0198デフォルトの名無しさん2006/06/16(金) 03:27:37
>>195
>MS VC++2005 で使える
かどうかは確認してないけど
gmpなんてのもある
0199デフォルトの名無しさん2006/06/16(金) 09:32:43
gmpはgccでしか使えない希ガス
0200デフォルトの名無しさん2006/06/16(金) 09:59:50
>>196
bigintってまだ残っていたんだ。
正式に採用される日は来るのかな。

個人的に、単純な実装でもいいから、
多倍長整数のための、標準ライブラリは必要だと思うのだけれど。
0201デフォルトの名無しさん2006/06/16(金) 12:05:43
>>195
単にC++のヘッダーファイルが*.hになってるだけだね。
気合で修正汁
0202デフォルトの名無しさん2006/06/16(金) 18:22:39
STLのmapをイテレータでアクセスする場合、
キーでソートされていることは保障されているのでしょうか?
次のコードによる出力結果が同じであることは、保障されていますか?

int main()
{
  std::map<int, int> test ;

  for (int i = 0 ; i != 100 ; ++i)
    test[i] = i ;

  for (std::map<int, int>::iterator Iter = test.begin() ;
    Iter != test.end() ;
    ++Iter)
  { std::cout << "key : " << Iter->first << ' element : ' << Iter->second << '\n' ; }

  std::cout << std::endl ;
}
0203デフォルトの名無しさん2006/06/16(金) 18:30:13
>>202
・できる限り載せるソースはコンパイル可能なものにしてくれ。
・「出力結果が同じ」とは? 何と何が同じであることを期待しているの?
0204デフォルトの名無しさん2006/06/16(金) 18:35:50
>>203
全角空白を半角空白に置換すればコンパイル可能だと思います。
VC8のDinkumwareでは、

1 1
2 2
3 3
...

のように表示されます。
デフォルトでは比較関数はstd::lessになるのは決まっていたと思いますが、
イテレータでアクセスする場合、
こういう風にソートされた形で順々に要素にアクセスできるのが、
規格として保障されているのか知りたいのですが。
0205デフォルトの名無しさん2006/06/16(金) 18:40:34
>>202
ほんとにコンパイルできた?
2バイト空白を置換してもエラーになるんだけどなぁ。
つーか、>204のようには出力されないと思うぞ。
#少し落ち着いて自分のコードをよく見てみるか自分でコピペして味噌。
##あ、すまんが本題の「規格で保証」されているかは知らない。
###でも、その筈だけどね。
####いや、保障はしてくれないのは間違いないなw
0206デフォルトの名無しさん2006/06/16(金) 19:03:59
>>202
ttp://www.sgi.com/tech/stl/Map.html
ttp://www.sgi.com/tech/stl/SortedAssociativeContainer.html
0207デフォルトの名無しさん2006/06/16(金) 19:48:25
>>205
パッと見、elementを囲っているのがシングルクォーテーションであるって以外は問題ないコードだが
0208デフォルトの名無しさん2006/06/17(土) 00:16:35
>>199
> gmpはgccでしか使えない希ガス

ttp://www.cs.nyu.edu/exact/core/gmp/
0209デフォルトの名無しさん2006/06/17(土) 00:46:57
エラトステネスの篩を使って素数を求めるプログラムを
作ったんだけどエラーが出ます。
助けてください。
ttp://uploader.fam.cx/data/u10732.txt
02102022006/06/17(土) 00:52:23
>>205
どうも文字列リテラルをシングルクオートでくくっていたみたいです。
すみません。

>>206
読んでみましたが、どこにもmapをイテレータでアクセスすると
ソートされているかどうかなんて、書かれていないような気がします。
02112092006/06/17(土) 00:54:18
今見たらいろいろ間違ってた。
申し訳ないです。
0212デフォルトの名無しさん2006/06/17(土) 01:00:45
>>210
> and they also guarantee that their elements are always sorted in ascending order by key.
02132022006/06/17(土) 01:06:07
>>212
Sorted Associative Containerの説明のほうにあったのですか。
どうもありがとうございます。
02141952006/06/17(土) 01:58:47
レスどうも。

>>196
頑張って探したけど、見つかりませんでした><

>>201
気合入れて修正して、コンパイルはなんとか通らせることが出来ました。
サンプルプログラムも正常に動作しているみたいです。でも、警告いっぱいでちょっと不安です。

gmpの情報もありがとうございます。ドキュメント読みながら考慮してみます。
0215デフォルトの名無しさん2006/06/17(土) 02:58:57
>>214
どう探したんだ?
http://www.google.co.jp/search?q=boost+sandbox+bigint
0216デフォルトの名無しさん2006/06/17(土) 13:59:47
どなたか教えてくださいませ。

GetValue()という関数があったとして、仮引数に与えたTypeとIndexによって、
戻り値がfloatやlongとして返ってくる方法は無いでしょうか?
キャストや別関数を作成しないでまとめたいのです。

戻り値
float(or long) GetValue(long iType, long iIndex);
0217デフォルトの名無しさん2006/06/17(土) 14:04:59
>>216
思いつく方法を書いてみた。

戻り値型のクラスを作成する(別関数と同程度の手間がかかる)
unionを使う(非推奨)
void *ポインタを使って環境依存のコード(非推奨&キャスト必須ゆえNG)
boost::anyを使う(キャスト必須ゆえNG)
例外を使う(禁止)

何がいいんだろう。
0218デフォルトの名無しさん2006/06/17(土) 14:09:10
>>216
戻り値の型がfloatではいけない訳を聞こうか。
0219デフォルトの名無しさん2006/06/17(土) 14:18:42
>>216
仮にGetValueがfloatやlongを臨機応変に返せたとして、受け取る側はどうするつもりだよ

long l = GetValue(); // floatを返すかもしれない
float f = GetValue(); // longを返すかもしれない
0220デフォルトの名無しさん2006/06/17(土) 14:19:21
floatじゃ駄目な理由は特にないんですが、
取ってきたいデータがfloatはlongと混在しているので、全てfloatで返ってきてしまうのが、
なんかスッキリしなくてですね。
0221デフォルトの名無しさん2006/06/17(土) 14:23:40
確かに...破綻してました。すいません。
0222デフォルトの名無しさん2006/06/17(土) 14:24:56
>>221
エスパーしてみると、iTypeってのがlongかfloatかを決めているのかな?
だとしたらtemplate使えばいいんじゃまいか。
0223デフォルトの名無しさん2006/06/17(土) 14:28:01
>>222
はい。Typeによって決めています。
最初テンプレート関数を使おうかと思ったのですが、私が馬鹿過ぎてほぼ使い方を忘れかけてまして...。
戻り値の型だけを変更することもできるんでしたっけ。
0224デフォルトの名無しさん2006/06/17(土) 14:31:20
そういう話なら、オーバーロードで十分。
0225デフォルトの名無しさん2006/06/17(土) 14:33:27
オーバーロードじゃ駄目だろ
0226デフォルトの名無しさん2006/06/17(土) 14:34:00
え゛
0227デフォルトの名無しさん2006/06/17(土) 14:38:30
>>223
出来る、が、iTypeを見て型を判別する責務をGetValueではなく、GetValueを使う側に移さないといけない。

template <class T>
T GetValue(long iIndex);

てなのを作っておいて

long l;
float f;
if (iType == /*long型*/)
  l = GetValue<long>(index);
else
  f = GetValue<float>(index);

のような感じの使い方なら可能だが…
0228デフォルトの名無しさん2006/06/17(土) 14:40:07
なんだ。コンパイル時に決まっていればそれでいいのか。
てっきり、戻す型がもっと多くて、コンパイル時にやるのが面倒だから聞いているんだと思っていた。

//ヘッダ
template < typename T >
T getValue(int idx) ;



//実装
template < typename T >
T getValue(int idx)
{
  return 0 ;
}

//longとfloatしか使わないので、明示的なインスタンス化をしておく。
template long getValue(int idx) ;
template float getValue(int idx)


でもこれ、わざわざ使うときに、getValue<long>とかgetValue<float>とかしないといけないな。
面倒かも。
0229デフォルトの名無しさん2006/06/17(土) 14:44:43
>>225
オーバーロードだとこんな感じ?
戻り値にはできなくなるけど

void GetValue(long & dest, int idx) ;
void GetValue(float & dest, int idx) ;

//使い方
long x ;
GetValue(x, 0) ;
float f ;
GetValue(f, 1) ;
0230デフォルトの名無しさん2006/06/17(土) 14:50:10
>>229
> キャストや別関数を作成しないでまとめたいのです。

というのがあるし、データを特定のインデックスから取ってくるってだけでオーバーロードを使ってしまうと、
それぞれの関数の内容がほとんど同じになってしまって無駄。
この場合はtemplateが妥当だろ。
longとfloatの場合でよほど処理に差があるなら話は別だが
0231デフォルトの名無しさん2006/06/17(土) 15:14:05
floatでいつも返して、受け取り側でキャストすりゃいいじゃn
0232デフォルトの名無しさん2006/06/17(土) 15:19:26
テンプレート関数ってオーバーライドできんだっけ?
0233デフォルトの名無しさん2006/06/17(土) 15:33:04
>>232
いつの時代の人ですか?
とっくにできるようになりましたよ。
0234デフォルトの名無しさん2006/06/17(土) 15:34:24
煽りいくない
0235デフォルトの名無しさん2006/06/17(土) 16:39:20
>>231
一般的に、floatの方がlongより精度がないので問題が出そう。
0236デフォルトの名無しさん2006/06/17(土) 16:42:19
>>232
オーバーライドはできないなぁ。
オーバーロードならできるけど。
>>233 いつの時代の人ですか?
0237デフォルトの名無しさん2006/06/17(土) 17:06:55
structにprivate指定できるのがむかつく
0238デフォルトの名無しさん2006/06/17(土) 20:54:51
>>237
D&E読めば少しは納得する気になれるかもしれない。
0239デフォルトの名無しさん2006/06/17(土) 22:58:08
等加速度直線運動についてのプログラムを書いたんですが、もうちょっとすっきりさせたいので赤ペン先生お願いします。
初心者なのでお手柔らかにお願いします
ttp://up.spawn.jp/file/up25025.txt
0240デフォルトの名無しさん2006/06/18(日) 01:39:43
>>239
何かと思ったら計算するだけかと思いきや何で全部intなんだよ
toukasokudoの中の変数はdoubleかfloatを使うか、割り算の前に1.0を掛けておけ
0241デフォルトの名無しさん2006/06/18(日) 01:45:08
>>239
各 case 節を関数に分けるといいよ。
何度も使われてる数値入力も関数にするのがいいよ。
0242デフォルトの名無しさん2006/06/18(日) 02:58:25
Visual C++ 2005 Express Edition 使ってCの勉強最近始めたっばかりなんだが

#include <stdio.h>
int main()
{
int a = 10;
int b = 7;
double c = (double) (a+b)/2.0;
printf("%f",c);
return 0;
}

「10」と「7」の平均を求め、小数点以下まで正しく表示させる問題で
上のが答えで下のが自分でやったものでどっちとも同じ答えが出力されるのですが
これはこれでいいのでしょうか?

#include <stdio.h>
int main()
{
short a = 10;
short b = 7;
float c = (a+b)/2.0;
printf("%f",c);
return 0;
}
0243デフォルトの名無しさん2006/06/18(日) 03:07:12
>>242
その場合は問題は無い、ように見えるが、厳密に言うとキャスト演算子を用いる方が適切。
結果は問題なくても、処理の流れとしては (double) のある方が適切。
0244デフォルトの名無しさん2006/06/18(日) 03:12:23
趣味の問題だと思うがなあ。
0245デフォルトの名無しさん2006/06/18(日) 03:14:53
>>242
それじゃ、(double) をつけずに c = a/b をやってみ。
次に c = (double)(a/b) と c = (double)a/(double)b を比較してみ。
どういう結果になるか?
各々の変数に対して (double) をつけなきゃ意味がないのが分かるよ。
a+b と変数同士が足し算だったから分からなかっただろうけど
変数同士の割り算ならどう?
0246デフォルトの名無しさん2006/06/18(日) 03:15:24
>>244 そりゃ違うだろw 一個人の趣味で言語の仕様が勝手に決まったら怖いよぉ〜
0247デフォルトの名無しさん2006/06/18(日) 03:17:21
普通はintとdoubleを使う、と斜め上のレスをしてみる
0248デフォルトの名無しさん2006/06/18(日) 03:24:45
よーしパパ、long long intにlong long double使っちゃうぞ
0249デフォルトの名無しさん2006/06/18(日) 03:25:31
よーしぼくちん、キャスト演算子なんて面度だから
変数の定義はすべてdoubleにしちゃうぞぉ〜
0250デフォルトの名無しさん2006/06/18(日) 03:29:43
普段は特に気にせずdoubleを使ってるが、結構奥深いのね。

C言語:float型の精度
ttp://homepage1.nifty.com/aok2/004/c04.html
0251デフォルトの名無しさん2006/06/18(日) 03:36:39
うむ、たかが0〜1の間の細かい数値でも、数学で出てくる
近似値だの常用対数だの、円周率だの、そういった数値計算を扱わず
整数ばかりを扱う人にとっては気にせんでもやっていけるもんだねw
0252デフォルトの名無しさん2006/06/18(日) 03:42:54
小数を扱う人たちの中にも、桁オチなんかされちゃ困る人もいるんですが
■ このスレッドは過去ログ倉庫に格納されています