C言語なら俺に聞け! Part 100

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:05/01/30 23:05:02
>>950
素人はすっこんでろ
953デフォルトの名無しさん:05/01/30 23:05:40
>>952
素人がそういうなよ。
954デフォルトの名無しさん:05/01/30 23:08:21
>>950
doubleだよ
955デフォルトの名無しさん:05/01/30 23:08:46
>>950-951
サンクスです!疑問が解けました!
本で読んだ限り、今のところデータ型が変化するのは「キャスト演算子」ってヤツの項で
出ただけだったので、これで変化するとは思いませんでした。
もしかするとあとで出てくるのかもですね。

胸のつっかえが取れたんで、先に進むことにします。
ありがとうございました。
956デフォルトの名無しさん:05/01/30 23:09:21
>>950
>>953
プゲラッチョ
957デフォルトの名無しさん:05/01/30 23:09:47
これで0.01をかけるという馬鹿なことをやる奴が増えるのかorz
958デフォルトの名無しさん:05/01/30 23:14:35
理由も述べずにそんなことをいう>>957も十分馬鹿だけどな
959デフォルトの名無しさん:05/01/30 23:26:02
>>944は解答を踏まえた上で、参考として聞いたんだと思うのだが。

>>957よ、宜しければ参考までに馬鹿じゃない場合のご高説を賜りたいものです。
960デフォルトの名無しさん:05/01/30 23:49:02
符号無し整数を加算するとき桁あふれを検出するには、
計算前の値を保存して毎回チェックするしかないんでしょうか?

 result = a + b + c;

だと桁あふれする可能性があるので

 unsigned int RobustPlus(unsigned int a, unsigned int b) {
  unsigned int tmp;
  tmp = a;
  a += b;
  if (tmp < a) {
   return UINT_MAX;
  }
  return a;
 }

 result = RobustPlus(RobustPlus(a, b), c);
 if (result == UINT_MAX) { error(); }

としてみたものの、どうも格好悪くて釈然としません。
961デフォルトの名無しさん:05/01/30 23:51:39
アセンブラだと簡単なのにね
962デフォルトの名無しさん:05/01/30 23:53:16
        ゴガギーン
             ドッカン
         m    ドッカン
  =====) ))         ☆
      ∧_∧ | |         /          / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     (   )| |_____    ∧_∧   <  おらっ!出てこい>>957
     「 ⌒ ̄ |   |    ||   (´Д` )    \___________
     |   /  ̄   |    |/    「    \
     |   | |    |    ||    ||   /\\
     |    | |    |    |  へ//|  |  | |
     |    | |    ロ|ロ   |/,へ \|  |  | |
     | ∧ | |    |    |/  \  / ( )
     | | | |〈    |    |     | |
     / / / / |  /  |    〈|     | |
    / /  / / |    |    ||      | |
   / / / / =-----=--------     | |
963デフォルトの名無しさん:05/01/31 00:05:20
>>960
おそらくそれが最善。
964デフォルトの名無しさん:05/01/31 00:14:06
>>960
double使ったらダメ?
965デフォルトの名無しさん:05/01/31 00:26:34
>>960
最上位ビットが両方とも0なら決して桁あふれしない。
最上位ビットが両方とも1なら必ず桁あふれする。
最上位ビットの排他的論理和が1ならRobustPlus()を使う。

でどう?
966デフォルトの名無しさん:05/01/31 00:48:07
>>965
そんなにビット演算をしつつも何度も比較が入る可能性があるならば、
素直に比較一回で済ませた方が得をすると思ふ。
967965:05/01/31 01:10:03
>>966
>素直に比較一回で済ませた方が得をすると思ふ。
わてもそう思ふ。
無理矢理こさえてみましたという感じ。
968965:05/01/31 01:28:58
うーん、もっと格好悪いな、こりゃ。

 unsigned int RobustPlus2(unsigned int a, unsigned int b) {
  if (a ^ b) {
   return RobustPlus(a, b);  }
  if (a & b >> 32) {
   return UINT_MAX;
  }
  return a + b;
 }

下位ビットまで再帰的にやればもっと格好悪くなりそう。
969965:05/01/31 01:41:15
しまった32じゃなくて31だ。それにしても移植性わるー。
970デフォルトの名無しさん:05/01/31 01:46:03
Cで使えるコンテナライブラリってないですか?
971デフォルトの名無しさん:05/01/31 01:47:46
突然ですが、失礼します。

char s1[10] = "test";

char s2[10];
char s3[10] = "test\n";

i=0;
while(s3[i]!='\n'){
s2[i++]=s3[i++]
}
s2[i]='\0';

このとき、
strcmp(s2,s1)==1 は成り立ちますよね?
972デフォルトの名無しさん:05/01/31 01:56:02
>>971
いいえ。
973デフォルトの名無しさん:05/01/31 01:56:11
成り立ちません
974デフォルトの名無しさん:05/01/31 01:57:14
> s2[i++]=s3[i++]
未定義。

> strcmp(s2,s1)==1
そんな危険な判断をするな。
975デフォルトの名無しさん:05/01/31 01:58:25
あ、すみません。記述ミスです。
strcmp(s2,s1)==0 の間違いです。
976デフォルトの名無しさん:05/01/31 01:59:46
s2[i++]=s3[i];
977デフォルトの名無しさん:05/01/31 02:00:04
つうかどこに論点を置いてるのかサパーリ分からん
978デフォルトの名無しさん:05/01/31 02:00:52
>>975
それでもダメ
979デフォルトの名無しさん:05/01/31 02:02:14
>>976
??
980デフォルトの名無しさん:05/01/31 02:05:56
もしかして成り立つまでデバッグしてくれという依頼なのか?
981デフォルトの名無しさん:05/01/31 02:08:06
すいませんでした。
論点が言いにくい問題でして、
ようはテキストファイルをバッファに取り込んで、
そのバッファから一文字ずつ読み込んで、改行がきたら、\0を入れて、
その取り込んだ一行の文字列と任意の文字列を比較して、
同じだったら処理といった形にしたいのですが、うまくいかなかったもので、
コンパイルはうまくいくのですが、実際に実行すると、途中表記ではしっかり取り込まれているのですが、
printf("%s",s2); でtestみたいに表示されているのですが、なぜか、0の値が返ってこないんです。
それで、根本的なことがちがっているのかと思いまして・・。駄文長文すみません。
982デフォルトの名無しさん:05/01/31 02:10:04
i=0;
while(s3[i]!='\n'){
s2[i]=s3[i];
i++;
}
s2[i]='\0';
983デフォルトの名無しさん:05/01/31 02:11:51
while(s3[i]!='\n'){
s2[i++]=s3[i++]
}
↑は、

for(i=0; s3[i] != '\n'; i++)
s2[i] = s3[i];

↑これ?
984デフォルトの名無しさん:05/01/31 02:14:34
m_pBufferLine[0] = '\0'; //ヌル文字を設定
int i=0;
do
m_pBufferLine[i++] = DxfData[m_BufferIndex++];//1行バッファに一文字読み込む
while(DxfData[m_BufferIndex-1] != '\n' &&
i < MAX_LINE_DXF &&
m_BufferIndex < FileLength);
m_pBufferLine[i-1] = '\0';
記述としては上記がそのまんまです。
985デフォルトの名無しさん:05/01/31 02:16:20
>>984
それはよかった。
986デフォルトの名無しさん:05/01/31 02:18:28
分かりにくくて、すみません・・・。
出直してきます。orz
987デフォルトの名無しさん:05/01/31 02:57:15
1行ずつ読んで特定の行が来たら処理をしたい、ってだけじゃないの?
なんでそんな難しい表現になるんだ?
988SE候補@大学生:05/01/31 06:30:37
この宿題はどのくらいのレベルですか?国立大学1年の授業です。(私立と違い教養科目が多いためプログラミングのような専門授業は少なめ)
http://www.ipc.e.kaiyodai.ac.jp/~shimizu/lecture/info/04/050112.pdf
989デフォルトの名無しさん:05/01/31 06:52:39
大学1年
990デフォルトの名無しさん:05/01/31 06:58:08
琉球大1年レベル
991デフォルトの名無しさん:05/01/31 07:22:05
前半にいたっては高校生
992デフォルトの名無しさん:05/01/31 07:41:01
>>988 学期末に出題されるんなら丁度いいんじゃねーの? 線形代数も習ってるだろうから
なおさらやりやすいでしょ。
993デフォルトの名無しさん:05/01/31 08:40:29
次スレ
C言語なら俺に聞け! Part 101
http://pc5.2ch.net/test/read.cgi/tech/1107128274/
994デフォルトの名無しさん:05/01/31 08:52:11
キャストって時間かかるんですか?
処理系は32bit Intel系のPCです。
995デフォルトの名無しさん:05/01/31 08:56:51
>>994
アセンブルリスト見ろ
実測しろ
996デフォルトの名無しさん:05/01/31 09:17:43
記念カキコ v(^-^=)
997デフォルトの名無しさん:05/01/31 09:18:50
1000とるから
998デフォルトの名無しさん:05/01/31 09:20:40
998
999デフォルトの名無しさん:05/01/31 09:22:49
999
1000デフォルトの名無しさん:05/01/31 09:23:25
1000だーーーーーーーーーーー!
やったーーー
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。