C++相談室 part166 (607レス)
1-

401: (ラクッペペ MM96-gPPd) 06/20(金)12:53 ID:y+CeF2upM(1) AAS
何故最適化レベルをワザワザ選べるようにしているのか?
完璧なら選ぶ必要はない
理想論には興味ないから語りたいなら具体的な問題点を上げていけ
402: (アウアウウー Sacd-xHx3) 06/20(金)13:06 ID:xCnXC/Iza(2/2) AAS
>>400
それは言われてたのは知ってるが
「-O3だとプログラムが動かなくなる」のは未定義踏んでるからじゃないか
403
(1): (ワッチョイ 6e9d-x4hs) 06/20(金)13:28 ID:H6JOW3Vp0(1) AAS
モバイルc消えてるんだけどなんで?
404: (ワッチョイ e908-x4hs) 06/20(金)13:42 ID:JPiEW2yh0(1) AAS
>>403
あれ便利やった
なんで消されたんやろ
405: (JP 0H46-E6Ax) 06/20(金)17:27 ID:yQfQLmUOH(1) AAS
std::formatの件だが、Visual Studio 2022のコンパイラ設定が
デフォルトでC++14標準になってた。すまん。
406
(1): 06/20(金)18:21 ID:4xHX9xY70(2/2) AAS
>>398
そんなことは知ってるのさ
「実行ごとに演算結果が変わる(可能性がある)」から最適化されない、と言うのは良いんだけど
最初からその前提の話をしていたはずなのに「演算をやらない可能性がある」と言い出しただろ?

375 整数型の変数を〜(略)〜この計算が最適化とかで除かれない保証ってあるの
381 それだと取り除けるケースがあるので保証はされない
382 いや、そんなことない。最適化では結果は変わらない事が保証される。
388 (略)〜演算をやらない可能性があるってこと

この流れじゃ『整数型の変数(実行時に結果が変わる)の場合でも最適化によって「演算をやらない可能性がある」』ってニュアンスになっているって気づかんの?
それに対してのどういう状況だ?という>>390だよ
省1
407
(1): (オイコラミネオ MMdd-Rgxs) [sate] 06/20(金)19:12 ID:ykKOKnwYM(1/7) AAS
>>406
回答者にも正しいことを言っている人と間違っていることを言っている人が
いるというだけ。
正しいのは、仕様に明示されている動作については、
最適化してもしなくても結果が変わらないという事だ。
なぜなら、それが仕様なのだから。
408: はちみつ餃子◆8X2XSCHEME (ワッチョイ f532-iKku) 06/20(金)19:41 ID:3ZuChe0s0(1) AAS
>>407
大元の質問からすると仕様が動作を保証するか結果を保証するかをわかってないようだからその説明では不十分でしょ。
409
(1): (オイコラミネオ MMdd-Rgxs) 06/20(金)20:44 ID:ykKOKnwYM(2/7) AAS
保証されます。
410: (ワッチョイ b235-m2eM) 06/20(金)21:00 ID:M1o0ztly0(1) AAS
コンパイル時に値が決まるようなら実行時に演算されない
そうでない場合でもある整数が決まった値になることが保証されていることがコンパイル時に分かっているなら最適化されて演算されないケースがある
それ以外なら最適化されない
411: (オイコラミネオ MMdd-15C+) 06/20(金)21:06 ID:80Iion+LM(1/2) AAS
いずれにせよ結果を使わないなら最適化で丸々消される
412
(1): (ワッチョイ 0175-Is3k) 06/20(金)21:12 ID:BxPKXrVj0(4/4) AAS
>>409
ただしバグがなければ
413
(1): (オイコラミネオ MMdd-15C+) 06/20(金)21:18 ID:80Iion+LM(2/2) AAS
最適化の時点でコードが消されるので直に0で除算をするとコンパイルエラー

変数に突っ込んでるとコンパイル可能で実行してもその部分は最適化され消されてるのでゼロ除算にならない
もちろんconstにしててもコンパイルエラー
414: (オイコラミネオ MMdd-Rgxs) 06/20(金)21:43 ID:ykKOKnwYM(3/7) AAS
>>412
それは、ユーザープログラムのバグではなく、コンパイラのバグだ。
コンパイラにバグが無ければ、四則演算や&,|,~,^,&&,||などと
括弧の組み合わせた結果は、最適化しても変わらない。
0除算に関しては話が別。
415
(1): (オイコラミネオ MMdd-Rgxs) 06/20(金)21:48 ID:ykKOKnwYM(4/7) AAS
最適化されて変わる可能性があるのは、今思い出せるのは、
・初期化してない変数の中身
・変数のアドレス
・結果を利用せず、副作用も伴わない式の存在。
整数に対する四則演算を含めた「計算」は、仕様が決められているので、
同じコンパイラと同じターゲット(OS、環境)だと最適化しても
結果は変わらない。
浮動小数点に対する計算は誤差の範囲で結果が変化する可能性はある。
416
(2): (オイコラミネオ MMdd-Rgxs) 06/20(金)22:25 ID:ykKOKnwYM(5/7) AAS
>>415
1. 整数の計算途中に「桁あふれ」が起きる場合はこの限りではないかも知れない。
 例えば、整数型 a に対して、a * 100 / 5 は、a * 20 と最適化できる
 可能性がある。しかし a がとても大きい場合には結果は同じにはならない可能性がある。このことに
 関して仕様がどうなっているかは知らない。
2. 浮動小数点型の変数 a に対して、(a * 100.0) / 5.0 は、
 a * 20.0 と最適化できる可能性があるが、浮動小数点型には計算誤差があるので、
 誤差の範囲内で異なる結果になる可能性があるかもしれない。
 これに対して仕様上、最適化していいかどうか走らない。
3. しかし、整数型
417: (オイコラミネオ MMdd-Rgxs) 06/20(金)22:25 ID:ykKOKnwYM(6/7) AAS
>>416
3. しかし、整数型変数 a に対して、(a / 100) * 100 は、
 明らかに
418: (オイコラミネオ MMdd-Rgxs) 06/20(金)22:26 ID:ykKOKnwYM(7/7) AAS
>>416
3. しかし、整数型変数 a に対して、(a / 100) * 100 は、
 明らかに a とは、結果が異なる。だから a と最適化される事は無い。
419
(1): (ワッチョイ 1279-T1jw) 06/21(土)01:51 ID:bIqfBqmB0(1) AAS
キミは色々と勘違いをしているからこの手の話をしたいならもうちょい勉強しよう
aが何だろうがa*100/5をa*20とはそもそも出来ないし、2.も同様
3.もaの値によっては演算の前後で値がおなじケースがある
色々あるのでいちいち書かなかったが、例えばaが10の倍数の時、aの絶対値が9以下の時、またaが列挙型だったり配列の添字だったりする時は挙動が推測出来るケースも出てくる
他にも最適化で実行時の演算をしなくてすむケースがある
演算をしなくてもaの値を変えることは出来うるし、その場合除算の代わりにいくつかの分岐や直値に変わるだろう
420: (JP 0H46-E6Ax) 06/21(土)02:46 ID:myS4seE9H(1/9) AAS
また空気読めない書き込みする。ずっと議論
が続いているけど興味ない。

そもそも実数データを表現するbit数が有限
なんだけど(doubleで8byte=64bit)、そりゃあ
場合によっては結果が違うが、実数の場合は
それほど問題じゃない。誤差の範囲内。

整数演算の方が問題。
i=32767/10000*10000の演算やったらどう
なるか?これはコンパイラの最適化の問題
じゃなくてプログラムする人が気をつける
省6
421: (JP 0H46-E6Ax) 06/21(土)02:49 ID:myS4seE9H(2/9) AAS
あ、言い忘れた。演算子のオーバーロードでの話ね。
422: (ワッチョイ 01de-Ni2x) 06/21(土)06:20 ID:mM+iEPSf0(1) AAS
>>413
0除算は未定義動作だから、(0除算については)最適化されてエラーが出なくてもC++規格通りかね。
423: (JP 0H46-E6Ax) 06/21(土)08:07 ID:myS4seE9H(3/9) AAS
浮動小数点演算で問題になるのは情報落ち(桁落ち)。
expを指数関数としてexp(x)+exp(-x)でxの絶対値が
大きくなるとどうなるか?4倍精度演算が標準として
ほしい。fortranには昔からある。たしか南米の人が
C++で4倍精度演算ライブラリ作ってた気がする。
424
(3): (JP 0H46-E6Ax) 06/21(土)08:14 ID:myS4seE9H(4/9) AAS
ところで、前から気になってたけど何でワイだけ
ワッチョイ出ないんだろ。メール設定ミス?それとも
プロバイダの問題?目立つから困る。
425: (ワッチョイ 71a6-Y+Ow) 06/21(土)09:45 ID:cFB8HkI30(1) AAS
signedのオーバーフローは未定義だがunsignedのオーバーフローは定義されてる
あとC/C++はfenvで浮動小数点コプロセッサのモードを切り替えられるから、それを使うつもりのコードはコンパイル時に計算されると狂ったりはする
426
(1): (アウアウウー Sacd-xHx3) 06/21(土)11:27 ID:fGhLJfIJa(1) AAS
>>424
ワッチョイと同じ役割を持つ名前一覧
1) オイコラミネオ
2) ササクッテロ
3) オッペケ
4) エムゾネ
5) スプー・スプッ

JPは知らん
427: (オイコラミネオ MMdd-Rgxs) 06/21(土)11:46 ID:pKk6RtsPM(1) AAS
>>419
あなたは馬鹿。
数学的センスが無いので、勉強しても直らないだろう。
428: (JP 0H46-E6Ax) 06/21(土)12:00 ID:myS4seE9H(5/9) AAS
>>426
レスありがとう。プロバイダが関係してるのかな
429: (アウアウウー Sacd-dpHj) 06/21(土)13:55 ID:xPq+xj/ja(1) AAS
>>424
VPNでも使ってるんだろ
430: (JP 0H46-E6Ax) 06/21(土)14:01 ID:myS4seE9H(6/9) AAS
VPNオンだと5chが書き込み拒否する。まあ、いいか。
1-
あと 177 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.024s