C++相談室 part166 (422レス)
C++相談室 part166 http://mevius.5ch.net/test/read.cgi/tech/1745631298/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
1: sage (ワッチョイ 8732-NXaD) [] 2025/04/26(土) 10:34:58.41 ID:pbPDl6lv0 !extend:checked:vvvvv:1000:512 !extend:checked:vvvvv:1000:512 ↑同じ内容を3行貼り付けること 次スレは>>980が立てること 無理なら細かく安価指定 ※前スレ C++相談室 part165 https://mevius.5ch.net/test/read.cgi/tech/1698705458/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured http://mevius.5ch.net/test/read.cgi/tech/1745631298/1
398: デフォルトの名無しさん (ワッチョイ 0175-Is3k) [] 2025/06/20(金) 11:57:23.05 ID:BxPKXrVj0 >>396 コンパイラで演算しても結果が変わらない場合に限り、コンパイラで演算を行いその結果だけを使う 392でも書いてるが、例題の変数を10で割って10を掛ける動作は演算結果が変わってしまうので最適化は行わない http://mevius.5ch.net/test/read.cgi/tech/1745631298/398
399: デフォルトの名無しさん (ワッチョイ 9279-fyaG) [sage] 2025/06/20(金) 12:39:35.73 ID:4fYw50h40 定数はいつ計算しても同じ結果なんだから最適化されるよ http://mevius.5ch.net/test/read.cgi/tech/1745631298/399
400: デフォルトの名無しさん (ワッチョイ 59c9-LWzS) [] 2025/06/20(金) 12:50:40.34 ID:yZt3hnAQ0 -O3だとプログラムが動かなくなるから使っていいのは -O2までって先輩に言われてた http://mevius.5ch.net/test/read.cgi/tech/1745631298/400
401: デフォルトの名無しさん (ラクッペペ MM96-gPPd) [sage] 2025/06/20(金) 12:53:23.61 ID:y+CeF2upM 何故最適化レベルをワザワザ選べるようにしているのか? 完璧なら選ぶ必要はない 理想論には興味ないから語りたいなら具体的な問題点を上げていけ http://mevius.5ch.net/test/read.cgi/tech/1745631298/401
402: デフォルトの名無しさん (アウアウウー Sacd-xHx3) [] 2025/06/20(金) 13:06:46.75 ID:xCnXC/Iza >>400 それは言われてたのは知ってるが 「-O3だとプログラムが動かなくなる」のは未定義踏んでるからじゃないか http://mevius.5ch.net/test/read.cgi/tech/1745631298/402
403: デフォルトの名無しさん (ワッチョイ 6e9d-x4hs) [] 2025/06/20(金) 13:28:04.40 ID:H6JOW3Vp0 モバイルc消えてるんだけどなんで? http://mevius.5ch.net/test/read.cgi/tech/1745631298/403
404: デフォルトの名無しさん (ワッチョイ e908-x4hs) [] 2025/06/20(金) 13:42:00.01 ID:JPiEW2yh0 >>403 あれ便利やった なんで消されたんやろ http://mevius.5ch.net/test/read.cgi/tech/1745631298/404
405: デフォルトの名無しさん (JP 0H46-E6Ax) [] 2025/06/20(金) 17:27:19.07 ID:yQfQLmUOH std::formatの件だが、Visual Studio 2022のコンパイラ設定が デフォルトでC++14標準になってた。すまん。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/405
406: デフォルトの名無しさん [sage] 2025/06/20(金) 18:21:03.44 ID:4xHX9xY70 >>398 そんなことは知ってるのさ 「実行ごとに演算結果が変わる(可能性がある)」から最適化されない、と言うのは良いんだけど 最初からその前提の話をしていたはずなのに「演算をやらない可能性がある」と言い出しただろ? 375 整数型の変数を〜(略)〜この計算が最適化とかで除かれない保証ってあるの 381 それだと取り除けるケースがあるので保証はされない 382 いや、そんなことない。最適化では結果は変わらない事が保証される。 388 (略)〜演算をやらない可能性があるってこと この流れじゃ『整数型の変数(実行時に結果が変わる)の場合でも最適化によって「演算をやらない可能性がある」』ってニュアンスになっているって気づかんの? それに対してのどういう状況だ?という>>390だよ まあ言いたいことは分かったから別にいいけどさ http://mevius.5ch.net/test/read.cgi/tech/1745631298/406
407: デフォルトの名無しさん (オイコラミネオ MMdd-Rgxs) [sate] 2025/06/20(金) 19:12:09.11 ID:ykKOKnwYM >>406 回答者にも正しいことを言っている人と間違っていることを言っている人が いるというだけ。 正しいのは、仕様に明示されている動作については、 最適化してもしなくても結果が変わらないという事だ。 なぜなら、それが仕様なのだから。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/407
408: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f532-iKku) [sage] 2025/06/20(金) 19:41:18.21 ID:3ZuChe0s0 >>407 大元の質問からすると仕様が動作を保証するか結果を保証するかをわかってないようだからその説明では不十分でしょ。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/408
409: デフォルトの名無しさん (オイコラミネオ MMdd-Rgxs) [sage] 2025/06/20(金) 20:44:54.01 ID:ykKOKnwYM 保証されます。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/409
410: デフォルトの名無しさん (ワッチョイ b235-m2eM) [] 2025/06/20(金) 21:00:28.00 ID:M1o0ztly0 コンパイル時に値が決まるようなら実行時に演算されない そうでない場合でもある整数が決まった値になることが保証されていることがコンパイル時に分かっているなら最適化されて演算されないケースがある それ以外なら最適化されない http://mevius.5ch.net/test/read.cgi/tech/1745631298/410
411: デフォルトの名無しさん (オイコラミネオ MMdd-15C+) [sage] 2025/06/20(金) 21:06:32.84 ID:80Iion+LM いずれにせよ結果を使わないなら最適化で丸々消される http://mevius.5ch.net/test/read.cgi/tech/1745631298/411
412: デフォルトの名無しさん (ワッチョイ 0175-Is3k) [] 2025/06/20(金) 21:12:56.63 ID:BxPKXrVj0 >>409 ただしバグがなければ http://mevius.5ch.net/test/read.cgi/tech/1745631298/412
413: デフォルトの名無しさん (オイコラミネオ MMdd-15C+) [sage] 2025/06/20(金) 21:18:29.51 ID:80Iion+LM 最適化の時点でコードが消されるので直に0で除算をするとコンパイルエラー 変数に突っ込んでるとコンパイル可能で実行してもその部分は最適化され消されてるのでゼロ除算にならない もちろんconstにしててもコンパイルエラー http://mevius.5ch.net/test/read.cgi/tech/1745631298/413
414: デフォルトの名無しさん (オイコラミネオ MMdd-Rgxs) [sage] 2025/06/20(金) 21:43:49.77 ID:ykKOKnwYM >>412 それは、ユーザープログラムのバグではなく、コンパイラのバグだ。 コンパイラにバグが無ければ、四則演算や&,|,~,^,&&,||などと 括弧の組み合わせた結果は、最適化しても変わらない。 0除算に関しては話が別。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/414
415: デフォルトの名無しさん (オイコラミネオ MMdd-Rgxs) [sage] 2025/06/20(金) 21:48:47.56 ID:ykKOKnwYM 最適化されて変わる可能性があるのは、今思い出せるのは、 ・初期化してない変数の中身 ・変数のアドレス ・結果を利用せず、副作用も伴わない式の存在。 整数に対する四則演算を含めた「計算」は、仕様が決められているので、 同じコンパイラと同じターゲット(OS、環境)だと最適化しても 結果は変わらない。 浮動小数点に対する計算は誤差の範囲で結果が変化する可能性はある。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/415
416: デフォルトの名無しさん (オイコラミネオ MMdd-Rgxs) [sage] 2025/06/20(金) 22:25:10.37 ID:ykKOKnwYM >>415 1. 整数の計算途中に「桁あふれ」が起きる場合はこの限りではないかも知れない。 例えば、整数型 a に対して、a * 100 / 5 は、a * 20 と最適化できる 可能性がある。しかし a がとても大きい場合には結果は同じにはならない可能性がある。このことに 関して仕様がどうなっているかは知らない。 2. 浮動小数点型の変数 a に対して、(a * 100.0) / 5.0 は、 a * 20.0 と最適化できる可能性があるが、浮動小数点型には計算誤差があるので、 誤差の範囲内で異なる結果になる可能性があるかもしれない。 これに対して仕様上、最適化していいかどうか走らない。 3. しかし、整数型 http://mevius.5ch.net/test/read.cgi/tech/1745631298/416
417: デフォルトの名無しさん (オイコラミネオ MMdd-Rgxs) [] 2025/06/20(金) 22:25:52.67 ID:ykKOKnwYM >>416 3. しかし、整数型変数 a に対して、(a / 100) * 100 は、 明らかに http://mevius.5ch.net/test/read.cgi/tech/1745631298/417
418: デフォルトの名無しさん (オイコラミネオ MMdd-Rgxs) [sage] 2025/06/20(金) 22:26:34.77 ID:ykKOKnwYM >>416 3. しかし、整数型変数 a に対して、(a / 100) * 100 は、 明らかに a とは、結果が異なる。だから a と最適化される事は無い。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/418
419: デフォルトの名無しさん (ワッチョイ 1279-T1jw) [] 2025/06/21(土) 01:51:51.86 ID:bIqfBqmB0 キミは色々と勘違いをしているからこの手の話をしたいならもうちょい勉強しよう aが何だろうがa*100/5をa*20とはそもそも出来ないし、2.も同様 3.もaの値によっては演算の前後で値がおなじケースがある 色々あるのでいちいち書かなかったが、例えばaが10の倍数の時、aの絶対値が9以下の時、またaが列挙型だったり配列の添字だったりする時は挙動が推測出来るケースも出てくる 他にも最適化で実行時の演算をしなくてすむケースがある 演算をしなくてもaの値を変えることは出来うるし、その場合除算の代わりにいくつかの分岐や直値に変わるだろう http://mevius.5ch.net/test/read.cgi/tech/1745631298/419
420: デフォルトの名無しさん (JP 0H46-E6Ax) [] 2025/06/21(土) 02:46:24.26 ID:myS4seE9H また空気読めない書き込みする。ずっと議論 が続いているけど興味ない。 そもそも実数データを表現するbit数が有限 なんだけど(doubleで8byte=64bit)、そりゃあ 場合によっては結果が違うが、実数の場合は それほど問題じゃない。誤差の範囲内。 整数演算の方が問題。 i=32767/10000*10000の演算やったらどう なるか?これはコンパイラの最適化の問題 じゃなくてプログラムする人が気をつける べきことだと思う。というか、変な最適化 はしない方がいいと思う。最適化しなくても 現在のコンピュータ能力じゃあ大して時間差 は問題にならん。 それよりも行列演算でNRVOを実装してほしい。 gccの一部では実装されているみたいだけど。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/420
421: デフォルトの名無しさん (JP 0H46-E6Ax) [] 2025/06/21(土) 02:49:22.52 ID:myS4seE9H あ、言い忘れた。演算子のオーバーロードでの話ね。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/421
422: デフォルトの名無しさん (ワッチョイ 01de-Ni2x) [sage] 2025/06/21(土) 06:20:55.55 ID:mM+iEPSf0 >>413 0除算は未定義動作だから、(0除算については)最適化されてエラーが出なくてもC++規格通りかね。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/422
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.933s*