1read 100read
2012年09月プログラム16: C言語なら俺に聞け(入門編)Part 109 (392)
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▼
Silverlight登場で.NET使い大勝利!!! Part2 (490)
プログラミング言語 Scala 8冊目 (562)
【会津】パソコン甲子園2004【若松】 (779)
datファイルを共有するP2Pソフト o2on 17dat (371)
【初心者歓迎】C/C++室 Ver.80【環境依存OK】 (550)
【アンチ】関数型言語は使えない【玩具】 2 (407)
C言語なら俺に聞け(入門編)Part 109
- 1 :2012/10/17 〜 最終レス :2012/11/02
- C言語の入門者向け解説スレッドです。
★前スレ
C言語なら俺に聞け(入門編)Part 108
http://toro.2ch.net/test/read.cgi/tech/1348995216/
★過去スレ
http://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
★教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 159代目
http://toro.2ch.net/test/read.cgi/tech/1342966104/
★C++言語については避けてください。C++対応明記スレへどうぞ。
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること。
# サイズが大きい場合はアップローダ等を利用してください。
http://codepad.org/
http://ideone.com/
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
- 2 :
- < `∀´> ニダー
- 3 :
- /* NOTREACHED */
- 4 :
- /* FALLTHROUGH */
- 5 :
- lint厨か
- 6 :
- え?lint 使える環境まだあるの?kwsk
- 7 :
- BSD系
- 8 :
- 小学校の先生とプログラマってどっちがデスクワーク多い?
- 9 :
- みなさま、お知恵をお貸しください。
私は、関数電卓を作っている者です。
文字列を構文解析し、現れたワードごとに演算を行うという簡単なプログラムです。
私は、ある問題に直面しました。
sin(n*M_PI)が0にならないのです。(nは整数です)
DBL_EPSILONを使った切り捨ては試しました。
しかしながら、nが大きくなると再び誤差が表示されてしまいます。
例 sin(1000000*M_PI)=誤差
この誤差はgoogle電卓でも現れました。
驚いたことに、市販の関数鵜電卓では、いっさいこの誤差が現れません。
C言語で、市販の関数電卓のように誤差をなくすにはどうしたらよいでしょうか?
詳しい方ご教授お願いします。
- 10 :
- |
|
|
|
/V\ ,J
/◎;;;,;,,,,ヽ
_ ム::::(;;゚Д゚)::| ジー
ヽツ.(ノ::::::::::.:::::.:..|)
ヾソ:::::::::::::::::.:ノ
` ー U'"U'
- 11 :
- nが整数かどうかを
まず判定すりゃいいじゃん
- 12 :
- SINの中にM_PIが入ってたら2M_PIでmodするようにすれば?
- 13 :
- 10年ぶりにunixCの開発に関わって、修正差分見ていたら
memcpy(wk, '\0', sizeof(wk));
なんて見つけたんだけど、なぜかコアは吐かないし同じ使い方してる本番アプリが他にもある
コンパイル調べたらなんか「NULL文字ポインタ」だとかで、
実験したら最大8192バイトまでヌルの配列が取れるようでカルチャーショックを受けました
でも書くならNULLだろ、'\0'は文字だろとか思ったけれど、俺はもう古い人間だってことでしょうか?
memcpy(wk, " ", sizeof(wk)); のほうはさすがに理解してないようですが
- 14 :
- その市販関数電卓で sin(0.1)-sin(1000000*PI+0.1) を計算させてみてほしい
- 15 :
- >>13
日本語で
- 16 :
- >>13
>書くならNULLだろ
残念ながらこの場合は http://www.kouno.jp/home/c_faq/c5.html#13 の「ASCIIのナル文字(NUL)」だ
書くなら 0 だ
>俺はもう古い人間だってことでしょうか?
古いだけでまったくわかっていない人間だってことだ、猛省しろ
- 17 :
- え?いいの?
- 18 :
- >>11さん
>>12さん
返信ありがとうございます。double型でmodが使えるんですね。初めて知りました。
if(fmod(SINの中身,M_PI)<DBL_EPSILON && fmod(SINの中身,M_PI)>-DBL_EPSILON){
return 0;
}else{
return sin(SINの中身);
}
てなかんじですかね?
>>14さん
返事ありがとうございます
3.3727E-9です
- 19 :
- >>18
> 3.3727E-9です
つまり、整数*pi の時だけ特別扱いしてるってことだな
- 20 :
- >>16
memcpyの第2引数が何であるべきか調べてから書け
- 21 :
- >>19さん
そのようです。
はずかしながら、私は整数の判別法が思いつきません。
キーを監視するしかないのでしょうか?
- 22 :
- >>16
>>13が言いたいのはmemcpy( void *dest, const void *src, size_t count )の引数srcはポインタなのに'\0'=0=NULLポインタを渡して大丈夫なのかという事だと思うの。
memset( void *dest, int c, size_t count )の引数cならintだからナル文字だけど、memcpyの場合はぬるぽと解釈されているはずだからね。
よく見ずにレスしちゃったんだね。猛省だね。
- 23 :
- >>20
memset() と思い込んでいた。
>>16
古いだけでまったくわかっていない人間だったのは俺だった。猛省する。
- 24 :
- トークンが実数か整数かなんて文字列的にわかりそうなもんだけど
- 25 :
- 許してやるよ
- 26 :
- >>24
変数だったらどうすんの?
sin(sin(pi/2)*2*pi)だったら?
- 27 :
- >>13
まず、このコードでcoreを吐くかどうかは、OS, アーキテクチャによるが、
一般にはcoreを吐きうる不正なプログラム。
次に、'\0' は整数の 0 とまったく区別はなく、
ポインタやポインタ引数に代入されたら NULL と同じになる。
- 28 :
- >>26
字句解析した時点で定数の型は分かるじゃん。
計算して求まる値は整数同士なら結果も整数とか決めておけばいいし、
変数は値を設定する時にどの型かわかるじゃん。
- 29 :
- 整数同士を足したら結果も整数、とか
- 30 :
- ごめんやっぱ嘘でw
- 31 :
- というか、指定した1文字(この場合'\0')で領域を初期化することに対して、
memsetではなくmemcpyを使用するメリットが分からない。
紛らわしいだけでしょ、絶対にレビューでつつかれるわ。
>>13の検証によると8192バイトの制限まであるらしいし。
処理速度でも違うのかね?
- 32 :
- 携帯から稚拙な文で失礼しました、一般には不正な文と見て良いようで安心しました。
このサイトでは問題なく動くのだから受け入れます。ポインタに'\0'を使うのは違和感ありますが、慣れます
- 33 :
- たまたま0番地から8Kゼロなページがマップされてる環境なのでは
- 34 :
- >>32
> 慣れます
慣れずに、こんな糞コード書くな、正解はこうじゃ、って修正してやる気概が必要
- 35 :
- Oracle関係のらしく ccに-v /(忘れた)/0@0.so.1 付けたら落ちない、付けないとコアです
makeの詳細は理解していないのでこれ以上は解らない、参照でポインタを0から回したら8192で落ちます
- 36 :
- >>23みたいにmemsetとmemcpyをとりちがえて、たまたま動いて、そのままってケースかな
- 37 :
- みなさま
様々な回答ありがとうございます。
整数の判断について調べていたところ
floor()==ceil()の条件式を使うと良いことがわかりました。
if (floor(x/PI)==ceil(x/PI)) {
return 0;
}else{
return sin(x);
}
コードはこのようになります。
これで希望の動作ができるようになりました。
調べていて、「処理理系によってはうまく働かないことがある」
という記述を見つけたので、少し不安ではありますが
これで様子をみてみます。
- 38 :
- マヌケな古いプログラムを救済するために0番地から8Kメモリが割り当てられてるだけだろ。
そんなのになれたら阿寒。
- 39 :
- >>37
> 調べていて、「処理理系によってはうまく働かないことがある」
だろうな
- 40 :
- C言語初心者にオススメの書籍を教えてください
- 41 :
- >>40
ちょっと古いけどK&R
- 42 :
- typedef int (*iarr)[]; // (1)
typedef int (*iarr10)[10]; // (2)
int a[10];
iarr aa1 = &a; // error
iarr10 aa2 = &a; // ok
うーん?
(1)の型は何処で出てくるんだ?
- 43 :
- >>41
ありがとうございます!買ってみます
- 44 :
- >>40
独習、初めてのとか、本すれ見たら
- 45 :
- >>43
いえいえ
- 46 :
- >>43
それは古すぎるからやめとけ
つかそもそも本を買うなんてバカな真似はやめておきなさい
図書館で読んで自分に合ってそうなものを持ち帰って読む
重要なところは自分で書き写す
図書館に無ければ注文する
プログラムの勉強は自習するだけならこれで十分
たかが文字情報に金を払う必要は無い
あらゆる情報はすべての人にとって平等で無料かつ自由に扱えるもので有るべきだ
- 47 :
- そんな労力使うくらいなら買った方が安上がりだなwww
- 48 :
- 時間の価値は人によって違うからな
本を買った方がいい人と、そうでない人がいる
- 49 :
- お前らはわかってない
時間が大切だからこそ写しなんだよ
いつでもさっと検索してWebより密度の高い情報にアクセスできるという利益はなかなか代えが効くものではない
「あーあれなんだっけな調べよう…でも資料は家だ明日にまわすか」なんてことをしてるからお前らはゴミなんだ
それでもまだこの期に及んで書き写す手間が嫌だというなら機械にやらせれば良い
われわれはIT技術者なのだから物事を自分でやる必要は無い
たった一度の投資で図書館のすべての本が自分のものになるのだからやらない理由は無いぞ
- 50 :
- >>46
K&Rも読みこなせなかったのか?
- 51 :
- >>50
時代にそぐわないと言ったんだが、君の理解力大丈夫か?
- 52 :
- 時代にそぐうお前に合ってたすばらしい本挙げてけよ
- 53 :
- 「窓から捨ててください」
「焼く捨ててください」
- 54 :
- C言語初心者にK&Rはない
- 55 :
- それしかない時代もあったんだから問題ない。
- 56 :
- 問題ないね
- 57 :
- CってK&Rじゃ対応できないほど新しいこと増えた?
- 58 :
- >>57
関数プロトタイプは重要
- 59 :
- >>58
今入手可能なK&R2には書いてあるから
- 60 :
- 読み物として面白いのは
「C言語を256倍使う本」
今では不要となった技術がてんこ盛りだが
侍魂にも通じるフォントいじりがなされていて
読んでいてマのなんたるかを直接に面白おかしく知ることができる
- 61 :
- 東海道中膝栗毛なみの本だな
- 62 :
- >>60
どんな本?ちょっとだけ教えて
- 63 :
- Cの初心者ならK&RとエキスパートCプログラミングあたりでいいだろう
コンピュータ自体の初心者なら、ハードルが少し高いかもしれないが
- 64 :
- ans = 'C'<<8;
- 65 :
- >>63
エキスパートCプログラミングは天才達の昔話が読み物としても面白いし、実用小ネタも多くていいよね。
変数や関数の宣言を読み解くフローは目から鱗だったわ。
- 66 :
- 目から鱗だったね
- 67 :
- 桜庭ななみ
- 68 :
- >>65
>変数や関数の宣言を読み解くフロー
K&R2 にのっているネタでは?
- 69 :
- うん、載ってるよ
- 70 :
- 結論:K&R2 でほぼ十分
反例:K&R2の線形リストは糞実装
- 71 :
- >>70
どういう実装なの?
- 72 :
- 自分で嫁馬鹿野郎
- 73 :
- >>71
え?
- 74 :
- >>71
そいつはこの板に粘着している技術力0のクズで、そいつのレスには1oの
信ぴょう性もないからかまってはいけない。
- 75 :
- talloc使ってたやつか?
- 76 :
- 桜庭ななみ
- 77 :
- 桜バナナ実
- 78 :
- >>71
http://toro.2ch.net/test/read.cgi/tech/1316592884/270-271
>>74
零はちょっとかわいそうじゃないですか?0.57721566 くらいは恵んでくださいな
- 79 :
- >>71
線形リストもしらずに「K&R2の線形リストは糞実装」といってるクズだってわかっただろ。
相手にするだけ時間の無駄。
- 80 :
- >>9
バイナリツリーに言及している時点で線形リストは既知と判断するのが普通なのですけれども
K&R2 のその部分が初心者向けで終わっているとのはまぎれもない事実
読んだことないの?
- 81 :
- うん、ないよ
- 82 :
- で、その「クソな実装の線形リスト」はK&Rのどこに載ってるんだ?
- 83 :
- カンカンカンカンカン、終了〜
- 84 :
- そこの処理には絶対行かないのに
そこ(whileとかforやブロックの中身)変更すると実行結果が変わる時ってありますか?
printfチェックで
絶対そこの部分には行かないのに
変更すると実行結果が変わってしまいます。
- 85 :
- それはメモリ破壊してます
検査してみて
- 86 :
- 絶対行かないとかホザいてるアホは
さっさとその臭いソースを出せよ
お前のタコなソースなんて
オレ様がみりゃー
一発だよ
- 87 :
- >>84
>>86 と同意見です。この手のバグとりは結構難解で、printf() デバッグではどうしようもなく、デバッガ出動に踏み切らざるを得ないと思います。
もしよろしければソースをみせていただけると何かヒントを提案できるかもしれません。
- 88 :
- >>82
K&R2 6.5、手元の和訳ではp171とか。
おっとよくみると線形リストじゃなかったね。記憶が混同していました。
ともあれ、ここで終わっているのは非常に惜しい
- 89 :
- またQZの敗北かw
負け惜しみが笑えるww惜しいのはお前だよwwww
- 90 :
- 線形リストを知らずに「K&R2の線形リストは糞実装」といってたクズ。
かまわない方がいいって証明できただろ。>>71
- 91 :
- 秘密だよ
- 92 :
- >>88
手元の原書だと
6.5 Self-referential Structures (P.139)
(ツリーを使って単語の出現数を出力するプログラム)
だけど合ってる?
何がクソなのか分からない
- 93 :
- >>92
void addtree(struct tnode **p, char *w) {
if (p == NULL) {
...
} else if ( ... ) { ... } else if (cond < 0)
addtree(&((*p)->left), w);
else
addtree(&((*p)->right), w);
}
あるいは
struct tnode *root;
addtree(&root,word);
まで踏み込みたかった。
root = addtree(root, word)
は実にムダにみえないか?
- 94 :
- 見える見えないじゃねーんだよ
whyを書けよアホ
自分の能力が低いから「みる」とかアバウトでアホでクズな単語使ってんだろ
そういうやつはお願いだからこのスレに書き込むなよテイノウ
- 95 :
- >>93
>>94
まあまあ、せっかくだから比較してみよう、ちょっと書いてみるわ
- 96 :
- ビット演算が8進数wwwww
- 97 :
- クズは他人のものにケチつけるより、自分のコードからムダを省くよう努力しろよw
- 98 :
- >>93
つまり、addtree()の返り値の代入は、最初の一回以外ずっと同じ値の
コピーだからムダだ。ってこと?
分からんでもないけど、K&Rのコードのシンプルさ(分かりやすさ)の方が
入門書には合ってると思う。
ググったらこのページが見つかった
http://www.s.kyushu-u.ac.jp/~z7kh03in/maekawa/bintree/source.html
K&R 2ndの件のページと同じコードだと思う
- 99 :
- 結構違った
http://ideone.com/DmuaH6
>>98
シンプルにしておけ!この間抜けの原則だっけか。そうか、それがあったな。
- 100read 1read
- 1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▲
【Delphi互換!?】FreePascal/Lazarus その2【GPL】 (288)
「コンパイラ・スクリプトエンジン」相談室15 (590)
NetBeans Part6 (864)
【Intel】OpenCV総合スレ 4画素目【画像処理】 (323)
MFC相談室 mfc22d.dll (304)
文字コード総合スレ part7 (921)
--log9.info------------------
【DQ10】あの子に恋しちゃった☆5話目【恋の悩み】 (649)
【DQ10】魔法使い専用スレ魔力+42【Wii】 (258)
【DQ10】酒場相互補完会(互助会)告知スレ (620)
【DQ10】サービス開始一ヶ月経つのにいまだにフレいない奴www (467)
【DQ10】 ハウジングシステム 13丁目 (916)
【DQ10】ふじさわDについて語るスレ【運営】 (915)
【DQX】棍棒PT募集スレ2【にちりん・棍】 (545)
【DQ10】大盗賊PT募集スレ きようさ 34【ぬすみ特化】 (747)
【DQ10】ランプ錬金職人専用スレ ★19 (856)
FINAL FANTASY Versus XIII-ヴェルサス-No.108 (957)
【DQ10】魔力覚醒修正【妥当修正】 (323)
【DQ10】ドラゴンクエストX パーティー募集専用12人目 (1001)
【DQ10】パラディン専用スレ みのまもり+8【Wii】 (845)
【総合】ドラゴンクエストX 目覚めし五つの種族 オンライン part1069【DQ10】 (1001)
【DQ9】最優良地図まとめスレ2 (497)
ぼくホイミン!(ホイミンVer3.0) (543)
--log55.com------------------
【Ripple】リップル総合805【XRP】
【金の卵】ICO(未上場コイン)情報スレ 29玉目
【PELOコイン】自動売買ツール8
【BTC】新BTCトレードスレ1【雑談・コテ禁・アフェ
【AMB】Ambrosus・Amber PART2
仮想通貨インフルエンサー総合スレ★61
【投資虚言業】KAZMAX★56【いつまで経ってももうすぐ】〜サロン〜
【WWB】wowbit 8 【KAZMAX激推し嵌め込みクソ通貨】世界は逆転、、、ww
-