[表示 : 全て 最新50 1-99 2chのread.cgiへ]
Update time : 05/10 00:22 / Filesize : 21 KB / Number-of Response : 64
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け(入門篇) Part 39



1 名前:volatileな名無しさん mailto:sage [2008/11/15(土) 05:04:45 ]
C言語の入門者向け解説スレです。

教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
  C/C++の宿題を片付けます 117代目
  pc11.2ch.net/test/read.cgi/tech/1225320579/

・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
・開発環境や動作環境も晒すと答えが早いかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
  C言語なら俺に聞け(入門篇) Part 38
  pc11.2ch.net/test/read.cgi/tech/1225451731/
過去スレ
  makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000

25 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 15:06:56 ]
浮動小数点のビット表現の標準規格があるから
大体の処理系はそれに準拠してる。
IEEEなんたらでぐぐれ

26 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 15:09:54 ]
>>25
IEEEなんたら の検索結果 約 17,800 件中 1 - 10 件目 (0.27 秒)

なんたらじゃわからんwww
IEEE754だな

27 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 15:12:58 ]
>>12
>小さな机ってのは,多分アキュムレータのことだよな?
>アセンブラの方を思い出して想像してみるとよくわかった.

早合点するやつはそれ以上学べないぞ。
小さな机はレジスタとか、あるいはスタックもありうるな。
アキュームレータはねえよ

28 名前:デフォルトの名無しさん [2008/11/15(土) 16:35:25 ]
>>24
ISO/IEC9899:1999(E) 5.2.4.2.2 Characteristics of floating types <float.h>
によれば、浮動小数点型は負数が表現できなければならないことになっているが、
符号ビットという実装を義務づけている記述は見あたらない。脚注 16 もそう読める。

29 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 17:24:36 ]
>>27
いや、load/store を指示可能な(外部からレジスタと同等に扱うことのできる)アーキュムレータ、というのもありまして。

30 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 17:27:07 ]
>>16
そりゃ、関数呼び出しで参照渡しの返り値が可能な言語処理系もありますし。

31 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 17:34:23 ]
>>28
なるほど。C99ではそうなっているということですよね。
ありがとうございました。

32 名前:デフォルトの名無しさん [2008/11/15(土) 17:37:54 ]
>>30
ここは C スレ

33 名前:デフォルトの名無しさん [2008/11/15(土) 17:46:29 ]
>>12
仮引数もそう書けと習ったのか?
返却値の話もろくに聞いていなかっただけだろ
malloc による文字列操作に至っては授業を欠席していたようだな

適性ある奴と同じ行動とってるとひでえ目にあうぞ



34 名前:デフォルトの名無しさん [2008/11/15(土) 18:16:16 ]
ちょっとトンチンカンな質問かもしれませんが

int n=0;
ong t;

while(n!=100){
time(&t);
printf("%f\n",t);
n=n+1;
  }

とやるとtの値として100個とも全く同じ値が出てくるのですが
これはプログラムを走らせてる最中全く時間が経過してないということなんでしょうか・・・?


35 名前:12 [2008/11/15(土) 18:16:49 ]
>>15
昨日調べようとおもって,図書館いったら誰かが借りてて見れなかったんだ.
今度本屋で立ち読みしてくるよ.

>>16 >>32
返すときも,値渡しなのかどうかって話.>>16のいうとおり,話がごっちゃになってきてるが,俺はCの返り値が参照渡しなのか,値渡しなのかがわからなかったからこういう質問をしてしまったんだ.
ここがCのスレだからCの返り値について質問してるんだ.

>>27
アセンブラの授業だと,スタックに入ってるデータをアキュムレータに入れないと足し算も出来なかったんだがなぁ.どうしてもアキュムレータに入れないといけないのかを聞いたら,出来る事は出来るが,遅いって言われた.

36 名前:34 [2008/11/15(土) 18:16:58 ]

すみません ong は long の間違いです

37 名前:12 [2008/11/15(土) 18:18:11 ]
>>33
授業は全部出てるしちゃんと聞いてる.
今回のreturnについては変だったから准教授にも聞いたんだ.
そしたら
double normalize(double th) {
while(th > PI) { th -= PID; }
while(th <= -PI) { th += PID; }
return th;
}
はだめで,
double normalize(double th) {
static double out;
while(th > PI) { th -= PID; }
while(th <= -PI) { th += PID; }
out=th;
return out;
}
としろって話だったんだ.

> 引数 th が関数に渡されるときに関数内部では別の変数が用意されて,その変数
> にコピーされます.この関数内の変数は当然 static ではないはずですので,
> return によって正しく返却されることは保証されないと思います.ですから,
> やはり static 変数を別に用意してください.
> なお,数式の評価値も正しく返却されるのか不安なので,私は static 変数に代
> 入してから return しています.たとえ仕様上は保証されていてもバグがあるか
> も知れないので,こうすれば安心です.
とのことだった.

仮引数の書き方はとくに指示されてはいないし,malloc による文字列操作どころかmallocはまだ名前以外出てきた事がない.
仮引数の書き方に適切なものがあるなら是非教えてくれ.

38 名前:デフォルトの名無しさん [2008/11/15(土) 18:19:59 ]
>>34
実行速度が速いから,1秒たつまでに終わっちゃうんだと思うよ.
100とするところを,1000000くらいにして試してみると,少しは変わるかも.

39 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 18:23:11 ]
>>37
教授がなんか勘違いしてんだろうね。

仮引数の件
char *func4(char *a,*b) {

char *func4(char *a, char *b) {

40 名前:34 [2008/11/15(土) 18:25:07 ]
>>38
なるほどほんとだ。
ありがとうございます。

41 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 18:27:43 ]
>>37
その準教授なり教授なりの返答はあまりにも稚拙だな。
あなたはstatic変数にしないと不安で仕方ないかもしれませんが、
私はそのようなことで不安になることもありませんし、メモリを浪費したくもありません。
とでも言っておけば?

42 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 18:31:11 ]
追記。
仕様で保証されているものをバグだ何だと騒ぎ立てるんだったら
staticにすれば大丈夫なんていうのも保証はないし、
そもそもnormalizeにthが壊れずに渡されるかどうかも心配すべき。

ちょっとどうかしてるよ。

43 名前:12 [2008/11/15(土) 18:34:50 ]
>>39
ですよね……
名古屋大出てるのにOrz

仮引数.
なるほど.次からちゃんと分けて書くようにするよ.
でもなんでそう書く方がよろしいんだ??

さっき,GNU libcを落としてきて,ソース漁ってみた.
printf.cのソースで,
int
__printf (const char *format, ...)
{
va_list arg;
int done;

va_start (arg, format);
done = vfprintf (stdout, format, arg);
va_end (arg);

return done;
}
ってなってたよ.次からいちいちstaticにするのはやめておくことにする.



44 名前:デフォルトの名無しさん [2008/11/15(土) 18:42:23 ]
printfで%lfで表示すると同じなのに、比較すると(if分で!=de)異なると
なってしまいます。片方は計算で得た5.0000、もう片方は5をdouble型に
入れたものです。
この二つをどうにかして同じ値として扱いたいんですが何かいい方法はないでしょうか?

45 名前:デフォルトの名無しさん [2008/11/15(土) 18:44:20 ]
日本語がおかしくてすみません
簡単に言うとif文の条件として二つの変数を比較するときだけ
小数点5桁とか4桁だけで比較したいんですがどうしたらいいでしょうか?

46 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 18:45:22 ]
>>44
浮動小数点では単純に==で比較すると誤差で涙目になる。
適当に許容する誤差を決めて
#define EPS 1e-5
if(fabs(a-b) < EPS){//aとbが等しいなら

}
みたいにやるのを薦める

47 名前:33 [2008/11/15(土) 18:50:37 ]
>>37
それは失礼した
しかし痛い教授にあたったものだな、ご愁傷様

試験のときも教授と同じ間違え方をしないと減点されかねないから気をつけてな

48 名前:デフォルトの名無しさん [2008/11/15(土) 18:50:50 ]
ありがとうござます!!

49 名前:デフォルトの名無しさん [2008/11/15(土) 19:00:53 ]
>>35
一つ言っておこう
授業で習うことなんて8割方嘘だ

初心者向けにかなり誤魔化しが入っとるけん、
全部鵜呑みにせんと、概要だけふーんと聞いておけばいいよ

50 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 19:10:07 ]
なぜ伊予弁

51 名前:34 mailto:sage [2008/11/15(土) 19:15:30 ]
すみませんもうひとつ質問なのですが、

たとえばゲームとかを作る時、キャラクターを動かす部分のプログラムは、
「今xに表示しているキャラ画像を、○○秒後にx+10に表示する」
みたいになると思うのですが、
そもそもこの部分の処理に○○秒以上かかっちゃっう場合はどうするんですか?



52 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 19:19:07 ]
>>51
動きがガクガクになる。

53 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 19:19:20 ]
教授なんて名大を出ててもそんなものか。。。
かったるくて日進月歩に合わせられないんだろうな。
法科、会計、情報系は教授もリアルタイムに日進月歩しないと駄目じゃね?
古いままだと実態に合わなく使い物にならなくなるから。



54 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 19:25:07 ]
>>51
タイマー割り込みの手法を使って、差分を計算してキャラを動かす。
キャラが増えて負荷が高くなったら、一部を間引いて処理する工夫を入れるか
タイマー間隔を延ばして処理する工夫を入れる。

55 名前:12 [2008/11/15(土) 19:25:23 ]
>>47
俺は授業よりも,Cの本の方を重点的にやってるから,
今回の返り値の謎に気がついたからよかったけど,他の連中に返り値がどうのとかいうと,
「返り血」と思われてしまうよww
困ったもんだ.准教授といえども,間違うってことか.
そう言えば,scanfのフォーマットで[]とか*とかもしらなかったもんな.

そんなもんなのかな?

>>49
准教授の授業3割,本4割,libcとかのGNUのソース2割,どっかのサイト1割くらいで参考にしてるから,
それは大丈夫だと思いたい.

質問の結論は返り値は値渡し.
みんなありがと.ずっと変なソース書き続けるとこだったよ.
聞いてみてよかった.

56 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 19:34:09 ]
>>37
誰か指摘してたが、関数内で不用意に性的変数を
参照するのは避けるべき
なぜなら再入可能でなくなるから

つまりマルチスレッドで同時にその関数を使用すると不具合が起こる

要はマルチスレッドプログラミングも
したことない助教授は明らかに素人なので
気をつけろってことさ

57 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 19:36:24 ]
人員不足で担当させられてるだけの門外漢だったりして

58 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 19:38:06 ]
なんという痛み分けw

59 名前:34 mailto:sage [2008/11/15(土) 19:40:46 ]
>>52
なるほど・・・
>>54
なんかよくわかりませんがいろいろ解決法があるのですね。
調べてみます。


60 名前:デフォルトの名無しさん [2008/11/15(土) 19:40:48 ]
>>55
つかさーアセンブラやってんなら返り血を
渡すコードがどうなってるか見てみるといいぜ
返す型でも変わるし

61 名前:デフォルトの名無しさん [2008/11/15(土) 19:51:26 ]
しかしこの返り値クンは、なんやかんやと言い訳ばかりでむかつくなw
後から伸びないタイプだわw

62 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 20:02:13 ]
管理職タイプ

63 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 20:09:43 ]
>>61
それはどうでしょうか。

>>55
こちらで返り血を浴びながら修練するのも一興
pc11.2ch.net/test/read.cgi/tech/1225320579/








[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<21KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef