【初心者歓迎】C/C++室 Ver.19【環境依存OK】
>>951 どーいうときに使うのか分かんなくて読み飛ばしてたところに思いっきり書かれてました。
早い返答ありがとうございます。
クソなのは昨日から勉強始めたばかりなので目瞑っておいてください…。
>>945 malloc()の速度は基本的には実装依存なので、ライブラリのソースを見
るか計ってみないとわからない。
でも、速度が大きさに依存する実装方法はちょっと思い浮かばない。ヒー
プのフラグメントっぷりに依存することは多いかも。
>>949 scanf("%s",x); //間違い。xはポインターじゃない。
scanf("%c", &x);
もしxを文字型配列にするんならscanfじゃなくてfgetsにしたほうがいい。
955 :
952:2005/07/17(日) 14:05:20
>>954 ご飯食べてさぁ続き、と思ったら更に質問するようなことが起きたのですが、
おもいっきしその解答が先出しされててびっくりしました。
本当にありがとうございまっす。
956 :
デフォルトの名無しさん:2005/07/17(日) 14:08:42
>>927 なんでdouble *SI = si;なんて冗長な事してるの?
バグとは関係ないけど見辛いから質問するときは止めとけ。
あと、*Lも
957 :
デフォルトの名無しさん:2005/07/17(日) 14:11:47
g++(gcc) 3.3.3 を使っているのですが、標準で使える class の一覧って
どこかにあるのでしょうか?ヘッダファイル(?)をあさるしかないのでしょうか?
例えばファイルの ctime が知りたいと思ったときどのような手順で調べるのが
普通なのでしょうか?
google で検索しようとしてキーワードに標準と入れると STLの説明ばかり
ひっかかってしまいます。タコで申し訳ありません。
公式サイト
マニュアル
書籍
ヘッダーファイル
自分でも驚いているのですが・・・
float x;
x = 1/4;
printf("%f\n",x);
わ、割り算が出来ません...orz
>>959 割り算はできてる。int / int で切り捨てられて 0 になっている
>>960 は 80点
x = 1.0f / 4.0f;
963 :
961:2005/07/17(日) 15:49:39
>>962 俺に聞かないでくれ
x が float型だからそうしたんだよ
(まぁ printf に渡されるのは double になっちまうけどな)
x が float型だったらfで計算しなくちゃならんのか?それが100点?
965 :
961:2005/07/17(日) 15:59:09
>>964 規格を額面通り受け取って
コンパイラによる最適化を考えなければ
よりよいコードだと思ったのだが。
何か問題でも?具体的に頼む
なんか自信なくなってきた
>>965 まずはあなたが何故そう書いたのか説明してくれよ
>>965 「よりよいコード」とか考えるんだったら x を double にするのが正解だろ。
それは流石に965に言うことじゃないと思うが
969 :
961:2005/07/17(日) 16:31:21
>>966 ゴメソ。じゃ説明する
>>960のコードは次のコードと同じようなことをしている
int i = 1L + 4L;
わざわざ大きい型を使っている
最終的に小さい型へ型変換される
>>967 禿同
低レベルな質問、度々申し訳ございません。
x=a+b+c;
while(x>3)
{
printf("%d",&a);
a++;
}
このループがエンドレスなのは何故でしょうか…。
あああ、書いたあとに自己解決。
と思ってx<3にしたら今度は何も表示されないように…。
floatよりもdoubleが数倍速いってマジなのかね。
なんか年寄りの昔話にしか思えないんだけど。最近のCPUでも成り立つ話なのか・・・。
>>973 自分で設定した条件式すらも理解できんのか?
前判定・後判定って知ってるか?
for文知ってるか?do while文知ってるか?
まだまだアドレスやらポインタやらは早いんじゃないかな?
>>976 コンパイラにマシン語吐き出させたら分かるんじゃない?
>>977 えーと、昨日始めたばかりなので、
アドレスやらポイントやらは何言われてるのかよー分かりませんが、
先に式書いておいてもwhileの中では反映されないってことに気付きました。
これが前判定後判定ってことですよね?
前判定、後判定なんて関係ないだろこの場合は
>>978 ループの中でxが更新されない限り、一度成り立った条件は崩れないだろ。
(他のタスクでうんちゃらかんちゃらは分かりにくくなるので省略)
だからループ抜けなかったり、入らなかったりするのは当然。
>>977 マシン語読めないんでorz
>>979 おお、コンパイラの話なのですか。
この記事は恐らくgccだと思うので、VCなら関係ないのかな・・。
なんでやねん
>>978 printf("%d",&a);
&aは変数aのアドレス
985 :
957:2005/07/17(日) 17:23:12
>>984 あああ、scanf("%d",&a)とかと勘違いしてましたー。
アドレスとやらはちょこっと教科書読み進めてみたら出てきましたけど、
良く分からないので取り合えず放置しときます。
あんまり低レベルでグダグダ質問しても失礼なのでこの辺りで自習に戻ります。
ありがとうございました。
>>971 彼が何が分からないのか今分かった。
一度 x=a+b+c という等式を教えたら、その後は自動的に計算し
てくれると思ってるのか。
"="はその時点での右辺の計算値を左辺の変数に代入するとい
う意味。
下記だとaしか更新されない。ループの中でxに再代入しない限り
ループに入る前の値を保持する。
x=a+b;
while (x<3) {
a = a+1;
}
>>987 何の前提もなく
> C言語の浮動小数点数には、float型とdouble型がありますが、この説明からは、
> float型には何のメリットも無いようでしょう。実際、無いのです。
ならば、この文章は間違いだな。
>>987 この部分だけ切り取って読むと、思い込みの激しい筆者に見えるな。
C言語の総論として書いているのをみると、この作者にとってはWindowsやLinux
上でのアプリ開発のためだけに、C言語は存在するのかなぁと、見えてしまう。
色々なCPUのコンパイラは昔々の話ではなく今でも立派な現役なのに。
992 :
957:2005/07/17(日) 18:32:55
まあfloat型がいいかdouble型がいいかはコンパイラとCPU両方に依存するだろうな。
FPUの実装にもよるし、コンパイラがどう最適化するかにもよるし。
特にコンパイラの最適化に関しては、最近はSSEのスカラ演算レベルなら
自動でやってくれるから、全部float型の方がいいかもしれないしね。
>>961 の、floatじゃないと80点だ、という話からこんな事になっただけだべ
次スレまだー?
VC++2003で面白い結果になった。
float型の変数に例の結果を代入するのを書いたんだが、
1.0/4.0も1.0f/4.0fも即値でコードに3E800000が埋め込まれて
movで代入するだけになってる。
最適化されちまってねえか
むしろdebugビルドでそうなったんだ。
だれかgccとbccでチェック頼む。
定数式がコンパイル時に評価されるのは最適化以前の問題だと思っていたが…
結論、何か理由がない限りfloatよりもdoubleを使おう。
同じように、1.0f / 4.0fとしないで 1/4.0で充分だろう。
千昌夫
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。