【初心者歓迎】C/C++室 Ver.100【環境依存OK】 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2016/11/06(日) 22:58:02.60ID:dU5z27As
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。

◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。

【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)

前スレ
【初心者歓迎】C/C++室 Ver.99【環境依存OK】
http://echo.2ch.net/test/read.cgi/tech/1469177649/
2017/06/17(土) 14:21:54.44ID:a/4tSU3I
>>716
自分が見ないページだから意識の外だった。
そのページはわかりやすく説明できているとは思うけど、
基本的な書き方で今更調べることはあんまりないよ。
2017/06/17(土) 14:31:32.36ID:bupTq8cx
712です。
短いコードを打ちこんで動作を確認しました。
皆さん有り難うございました。

(ちょっと気になったのは
void operator [](std::initializer_list <int > list);
これがvsc2015では動作しなかったことぐらいです。
)
721653
垢版 |
2017/06/17(土) 16:42:18.70ID:YXyzn6OG
それ戻り値がvoidだからじゃ

vs2015で試したら添字演算子の結果を使わなければvoidのままでも動いたし
戻り値返すようにしたら普通の使い方もできたよ
2017/06/17(土) 18:56:32.74ID:a/4tSU3I
話がそれるけど operator[] に initializer_list を渡したいときってどんなとき?
次元が動的に決まるようなコンテナとか?
2017/06/18(日) 00:16:25.00ID:sDQUBcQX
xyの二つの値を渡したかったんだろ
言わせんな恥ずかしい
2017/06/18(日) 00:50:52.82ID:fX2BYeVR
void って C++ の予約語の中ではカッコイイ言葉ナンバーワンだよな!
2017/06/18(日) 09:48:40.36ID:BCfBDJC6
auto に席をゆずったらしい‥
2017/06/19(月) 13:14:46.01ID:dXkNDY8/
pascal とか fortran の方が良くね?
2017/06/19(月) 13:45:34.22ID:LlSBVcNV
後藤
2017/06/19(月) 14:29:30.47ID:MatPzd+v
>>726
良かろうが悪かろうがこのスレに来てるのはそれでも C/C++ を使うってやつらなんだからその問いかけは無意味
2017/06/19(月) 15:29:57.68ID:dXkNDY8/
予約語として他言語から呼べる万能感があるのに :-P
C89では削除されたのだっけ
2017/06/19(月) 19:14:53.97ID:zNrORK8z
>>727
setjmp/longjmp のインパクト!を考えると、いまいちだと思いますぅ
2017/06/20(火) 00:48:54.33ID:tAZ0INkH
longjmpは無理やり過ぎだよな
Cならではとも思うが
2017/06/20(火) 00:52:30.35ID:tAZ0INkH
リターンアドレスレジスタみたいなの持ってる石だと
ちょいとだけ複雑になるのかすぃら?
2017/06/20(火) 23:58:21.18ID:f6m5FZzF
>>172
>MISRA-C研究会が書いている、MISRA-C 2004(C90) の本をみっちり、勉強しろ!
>研究会のメンバーでさえ、規格に詳しい人がいないのだから

規格も理解できない奴らが集まって書いた27年前の規格の解説本って
やばすぎだろ
2017/06/21(水) 00:16:32.09ID:vvvagSt1
5ヶ月以上前のレスに反応するって
やばすぎだろ
2017/06/21(水) 04:19:48.48ID:ZaPNA4YS
コンパイラやライブラリが腐っていることなんて
良くある事。利用者は配慮してくれないと (AA略)
2017/06/21(水) 11:49:15.08ID:x++JJuQ3
最終的にできたものが使用通りならそれでいい
規格準拠度なんてどうでもいいな
2017/06/21(水) 13:05:32.11ID:sg+bsLqU
/* 仕様通り動いたコード */
int Z = 0; // これを消すと動かなくなる
int Z2 = 0; // 2010.1.4. vcバグ回避の追加
char *s, *p;
if (s==p) return 2; //これ必要?
2017/06/23(金) 22:17:07.01ID:U/0DguFU
A a = {};
これってコピーコンストラクタ呼ばれる可能性ある?
2017/06/24(土) 00:27:16.63ID:PfOqrM0w
ない
2017/06/24(土) 00:27:41.83ID:5MVxspQe
>>738
ない
(もちろんaを構築するときに呼ばれるコンストラクタの話
Aのコンストラクタの中で起きることまでは知りようがない)
2017/06/24(土) 09:24:07.49ID:AroON3at
イコールあるけどコピーしないん?
もう文法わけわからん
2017/06/24(土) 13:28:24.19ID:7MOF4v/u
変数宣言のときの=はあくまで初期化であって、たまたま同じ記号を使ってるだけで代入とは違うと思ったほうがいい

同じと思うと他にもC++の参照とかで混乱する
743デフォルトの名無しさん
垢版 |
2017/06/24(土) 15:16:01.77ID:qquEaJ2M
>>741
コピーしようがしまいが結果は一緒でしょ?
単に最適化の結果で余計な処理が動かないだけと考えればいい
2017/06/24(土) 18:10:28.98ID:Ipep7Yd5
>>743
一緒じゃねーよヴァカ乙
リソースはメモリだけと思ってんの?どんだけお花畑なの?
mutex a = {};コピー無しの保証
745デフォルトの名無しさん
垢版 |
2017/06/26(月) 12:57:25.63ID:dr/i6/ki
>>744
コピー出来るクラスを例に持って来いよ
2017/06/28(水) 18:40:34.84ID:lG20CtJa
コピー出来ないクラスではコンパイル結果が異なるという>>744の指摘に対して
「コピー出来るクラスを例に持って来い」とはこれ如何に
747デフォルトの名無しさん
垢版 |
2017/06/28(水) 18:53:40.08ID:fwJBxSlX
>>746
その元コメントはコピーしようがしまいがと言ってるのにそもそもコピー出来ないクラス持ってきて罵倒とはこれ如何に
2017/06/28(水) 20:44:21.28ID:VFMMUwAr
>>743
一緒じゃない
一緒になるようにクラスを設計すれば一緒というだけ
2017/06/28(水) 20:47:16.20ID:VFMMUwAr
デフォルトコンストラクタでカレーライスを製造
コピーコンストラクタでラーメンを製造
代入でうどんを製造

同じか?
2017/06/28(水) 21:08:19.84ID:lG20CtJa
>>743が「コピーしようがしまいが」と言ったからこそ>>744がコピーされてはは困る例を出したのだが
悲しきかな>>747には理解ないのであった
2017/06/28(水) 21:16:03.41ID:VFMMUwAr
いや、ちょっとズレてると思うよ
2017/06/28(水) 22:13:17.29ID:xb2y2Mwj
横から何だけど
どうズレてるかの説明は無いの?
753デフォルトの名無しさん
垢版 |
2017/06/28(水) 22:25:47.08ID:xMEBWJOX
コピーしない保証がC++17でさらに追加されたがそこで最適化でコピーしようが直接構築しようがどちらでもよかったC++14までの規格は彼の頭の中ではヴァカでお花畑らしい
2017/06/28(水) 23:59:13.87ID:lG20CtJa
なるほど>>738を初期化でなくcopy/move elisionの話だと勘違いしたままだとこのようなとんちんかんなレスになるのだな
残念なのが>>739-742を読んでも勘違いに気付かないことだ
755デフォルトの名無しさん
垢版 |
2017/06/29(木) 00:23:16.57ID:0BA30UdR
>>754
とりあえずお前が一番元のレス読んでないと言うことは解ったよ。
読んでるというなら彼が何を疑問に思ってるか、そしてそれへの説明をしてみるといい
2017/06/29(木) 08:20:56.52ID:J9UCM8ul
>>752
恐らく>>751は「コピーしようがしまいが」について、コンパイル可否(>>750で書いたコピーされてはは困る例)ではなく
「デフォルトコンストラクターで構築したものとそれをコピーして構築したものを概念的に同一視することの是非」こそが論点と主張している
その片鱗が>>749
2017/06/30(金) 16:06:42.41ID:YTlik2k9
printf("おちんぽじゅぽじゅぽ")
2017/06/30(金) 23:27:57.21ID:SxEaPPM4
catch のところで例外を再スローすると
再スローされた例外の型は、catchの所に書いたスーパークラスの型に
差し代わってしまうの?
2017/06/30(金) 23:50:44.58ID:wfcExao2
式無しのthrow;なら元の型のまま
2017/07/01(土) 17:28:15.16ID:T5yR4ind
「型に差し代わってしまうの?」
 ↓
「〜なら元の型のまま」

確かにその通りなのだが、「型」に着目するあたり、
どうも仕様を正しく理解していないのではという気がしてならない
2017/07/01(土) 22:43:53.34ID:mdEe7tMk
c++は難しい分ほかの言語より色々できると聞いたんですがどういうことができるのでしょうか?
2017/07/01(土) 22:56:09.11ID:qtP/3v2i
メモリアクセスができます
2017/07/01(土) 23:22:20.76ID:sgaEl9jo
難しいからではなく低級言語なのでハードウェアを直接操作するようなプログラムも書ける
2017/07/02(日) 00:10:04.15ID:kxMmAO7v
>>762
>>763
ハードウェアに直接操作やメモリアクセスですか
トンクスです
2017/07/02(日) 10:29:07.80ID:TVPISEnD
質問です
doubleの計算誤差ってちゃんと考慮必要でしょうか?
数桁の四則演算なら誤差なしと考えていいですか?
766デフォルトの名無しさん
垢版 |
2017/07/02(日) 12:30:57.68ID:w2e8t6sv
考慮が必要な時もあるし
不要な時もある
767765
垢版 |
2017/07/02(日) 13:04:46.92ID:hIH6r6Dk
>>766
考慮必要ですか、、
ありがとうございます
2017/07/02(日) 14:24:20.03ID:O/UEQvVu
精度保証付きの演算ライブラリ使えば?
2017/07/02(日) 15:42:45.32ID:1Me6IR2g
4倍精度でも8倍精度でも多倍長でも整数でも有理数でも、使い方を間違えば誤差が問題になる

安直な処理で一番問題が発生しやすいのが整数丸めと比較
ごくごく微妙な誤差は何時でも含んでいると思うと良い
2017/07/02(日) 15:45:50.50ID:1Me6IR2g
>>768
大抵の演算ライブラリや演算器は精度の保証がある
2017/07/02(日) 16:02:14.06ID:O/UEQvVu
>>770
いや、そうじゃなくて浮動小数点計算誤差由来の誤差を解決するための分野とライブラリがあるんだよ
解をレンジで持ち続けるみたいな感じ
Accuracy guaranteed numerical calculation でググるとたくさん出てくるよ
2017/07/02(日) 16:12:27.01ID:1Me6IR2g
>>771
解をレンジで持ち続けて何か解決出来ると思うか?
>>765レベルの人が
773デフォルトの名無しさん
垢版 |
2017/07/02(日) 16:13:48.15ID:9wrwY3nx
mpir、gmpだろ。これ使えば円周率1万でも1億でも正確に計算できるはず
2017/07/02(日) 16:15:08.10ID:1Me6IR2g
有理数を有理数のまま保持している分には、四則演算では誤差が発生しない

もちろんオーバーフローしない条件で
2017/07/02(日) 16:16:17.16ID:1Me6IR2g
>>773
前提条件は数桁の四則演算
2017/07/02(日) 16:18:03.31ID:1Me6IR2g
doubleで計算を前提とし、誤差が問題となりやすい場面だけ教えてあげれば十分
777デフォルトの名無しさん
垢版 |
2017/07/02(日) 16:22:01.48ID:9wrwY3nx
実際、浮動小数点型の誤差は無視できないぞ。
float型とか、容量が少ないほど。情報処理の入門書の最初から出てくる話題だろ。
778デフォルトの名無しさん
垢版 |
2017/07/02(日) 16:22:48.13ID:jIucKliD
いい加減スレタイ変えろよ

【初心者姦ゲイ】C/C++室 Ver.100【姦狂依存OK】
2017/07/02(日) 16:36:49.35ID:1Me6IR2g
>>777
無視できる場合もあるし出来ない場合もある
floatや半精度があるのはそれで十分な場合があるから
2017/07/02(日) 16:37:57.96ID:1Me6IR2g
doubleより前に、整数演算の誤差を学ばなければならないレベルかも
2017/07/02(日) 16:42:50.35ID:1Me6IR2g
>>765
>>768
>>777
まとめて
2017/07/02(日) 17:12:26.96ID:ZK/8Emjh
コーディング規約で
float、doubleは使用禁止が正解
2017/07/02(日) 18:20:54.13ID:p749GQFM
1/3の結果に3を掛けても1にならないとか、
0.1を10回足し合わせても1と一致しないとか、
その辺りは分かっているのかな?
2017/07/02(日) 18:24:15.36ID:p749GQFM
>>782
質問者は浮動小数点数の演算のどこに注意点があるか分かっていない状態で、
いいから浮動小数点数は使うな、
というのは回答として乱暴過ぎるだろう。
2017/07/02(日) 18:38:08.40ID:FdY2ZCkQ
・同じ計算をするんでも
なるべく精度の高いアルゴリズムを選ぶ
・0との比較では、絶対値と計算機epsilonの比較を用いる

他にある?
2017/07/02(日) 18:50:30.43ID:MoO3L/4V
>・0との比較では、絶対値と計算機epsilonの比較を用いる

何かとごっちゃになってる気がする。
計算の収束判定等で用いるのは機械イプシロンじゃない。
787デフォルトの名無しさん
垢版 |
2017/07/02(日) 19:09:48.56ID:MlDTzv8m
>>785
0との比較に限らず、比較には絶対値の大きさに応じたεの考慮が必要。
2017/07/02(日) 19:18:00.04ID:ttjnRDkm
機械イプシロンはあくまでも最大値だよね
2017/07/02(日) 20:17:22.84ID:+3axEb/N
初めて知りました
2017/07/02(日) 20:44:23.29ID:+3axEb/N
数桁のdouble計算で誤差が問題になる場面では「誤差が存在する」ことが問題であって、精度を上げることは(誤差の大小は)本質的な解決でないような
(3.1 - 2.9 > 0.2) != (3.1 > 2.9 + 0.2)みたいな
791デフォルトの名無しさん
垢版 |
2017/07/02(日) 21:37:11.95ID:9wrwY3nx
計算順序で誤差が違ってくるのは教科書でよくかいてある
2017/07/02(日) 22:54:19.38ID:ynDhLM7Z
情報処理資格に受かっていない人が、C/C++ をプログラミングするなど、10年早い

C/C++ は、直接デバイスを扱うから、自作パソコンを作れるぐらいに、
かなりパソコン内部の装置の仕組みを、知っていないと無理

さらに組み込みなら、高度情報処理のエンベッド資格も必要
793デフォルトの名無しさん
垢版 |
2017/07/02(日) 22:59:43.93ID:9wrwY3nx
そんなことはない
2017/07/02(日) 22:59:50.00ID:MoO3L/4V
お前は試験に受かってからプログラミング始めるのかw
2017/07/02(日) 23:03:16.06ID:UYpoTCPe
パソコンって、アドレスバスの、メモリ読み書きで、
デバイスを、直接操作するのか?
それとも、アドレスA0000に文字を書き込むのか?
その知識、30年くらい、遅くね?
2017/07/02(日) 23:32:00.58ID:1Me6IR2g
>>782
整数も除算に誤差があるから禁止
2017/07/02(日) 23:32:37.56ID:1Me6IR2g
>>783
整数でも1/3*3は1にならない
2017/07/02(日) 23:35:11.82ID:1Me6IR2g
>>785
コストも考えなさい

epsilonは>>786の通り
補足すると、
収束判定に限らず、普通はepsilonで判定しない
2017/07/02(日) 23:36:02.92ID:iWsKHD5Z
0になるし誤差はないな
2017/07/02(日) 23:36:20.12ID:1Me6IR2g
>>792
情報処理資格www
なんの役にもたたない
2017/07/02(日) 23:36:31.36ID:iWsKHD5Z
って触れちゃダメな奴だったかすまん
2017/07/02(日) 23:38:56.12ID:+3axEb/N
前回、共用体の非アクティブメンバーアクセスが許されるcommon initial sequenceの条件である「型の互換性」に目を付けたレスを見た時は
>>792がもう少し見所の有る奴だと思っていた(過去形)
2017/07/02(日) 23:51:33.15ID:p749GQFM
>>797
すまん、1/3は1.0/3とか書くべきところだったな。
2017/07/02(日) 23:53:35.08ID:1Me6IR2g
いやいやそこじゃなくて
2017/07/02(日) 23:55:20.40ID:1Me6IR2g
1.0/3.0*3.0 が 1.0にならないことがある
1/3*3 が 1にならない

小数演算特有ではない
2017/07/02(日) 23:59:40.73ID:1Me6IR2g
0.1を10回足しても1にならないことがあるって言うのも小数特有ではない

0.1は普通のfloatやdoubleでは表現できず、コンパイル時に近似値に変換する
この意味では以下と本質的には同じ

int a = 0.1;
int b = a * 10;
807デフォルトの名無しさん
垢版 |
2017/07/03(月) 00:01:24.04ID:UYk8Gv77
>>792
自作って高価なプラモデルだぞ。。。
夢見過ぎ。
直接ってもなぁ。。。
昔はx86限定で直接レジスタ弄れる命令あったんだが、その命令は今じゃ優先的にレジスタ使ってね☆って意味に変質してるもんなぁ。。。
今のCは思ってるより下級言語じゃ無いぞ。
普通の言語よりゃハードに近いけどさ。
2017/07/03(月) 00:02:29.57ID:Ds1QZZUB
doubleがintに比べて誤差が少ないため、誤差を気にせずに使ってしまいやすい

だから注意の意味を含めて誤差が大袈裟に語られる傾向がある

当然整数の方が(普通は)はるかに誤差が大きい
2017/07/03(月) 00:03:12.56ID:NRAuceWo
>>805
それは知ってるけど元の質問者がdoubleの演算誤差について聞いているのだから、整数の除算の件は話が外れていると思う。
この手のスレに良くあることだけど、元の質問から勝手に話が発散して何を目的に議論しているのかが分からなくなるね。
2017/07/03(月) 00:04:40.53ID:Ds1QZZUB
いやだから、

気を付けるべき点は >>769 の後半にまとめたつもりだけど
2017/07/03(月) 00:10:25.95ID:Ds1QZZUB
よくやりがちな例は、

for (double a = 0; a <= 1 ; a += 0.1)

みたいな比較と

double a = sqrt(3);
double b = a * a;
int c = b;

みたいな整数丸め
2017/07/03(月) 00:12:35.84ID:Ds1QZZUB
これは、
double に限らす10000桁精度の演算ライブラリでも全く同じ問題がほぼ同じ率で起こる
2017/07/03(月) 00:14:47.47ID:Ds1QZZUB
前者はループが10回か11回かはバクチで、
後者はcが2になるか3になるかはバクチ
814デフォルトの名無しさん
垢版 |
2017/07/03(月) 00:19:44.20ID:UYk8Gv77
なんかそんなの読んだことあるな。
計算結果は精度の範囲内だけど、計算途中で精度超えて結果に誤差が出る的な。
なんか対策あったぞ。
2017/07/03(月) 04:06:04.60ID:yzYakBEJ
>>798
普通は計算機epsilonで判定は
しない、これはわかりました
じゃあどんな値で判定するんですか?
2017/07/03(月) 04:57:07.32ID:BlNCaFmm
>>792
カーニハンもリッチーも受かっていないようだが?
2017/07/03(月) 08:32:52.95ID:rvaVDuHz
>>815
対象の値が含み得る誤差を用いる。
機械イプシロン(を指数によってスケールしたもの)は誤差の下限を示しているだけに過ぎない。
2017/07/03(月) 11:17:36.99ID:rWGDP/Vn
下限ではない
下限はその半分
819デフォルトの名無しさん
垢版 |
2017/07/03(月) 19:44:02.70ID:BsrmCust
VisualC++とそれ以外用とで別の関数を用意して、プリプロセッサを使用してコンパイル時に選択したいと思っています
この場合、関数全体を#ifdef _MSC_VER〜#endifで囲うことになるのですか?
もう少しきれいな書き方があれば教えてください
よろしくお願いします
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況