- 1 名前:sage [2025/04/26(土) 10:34:58.41 ID:pbPDl6lv0.net]
- !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
- 301 名前:デフォルトの名無しさん mailto:sage [2025/06/15(日) 08:13:33.37 ID:vQtYxwCW0.net]
- 国語力w
- 302 名前:デフォルトの名無しさん mailto:sage [2025/06/15(日) 09:32:37.19 ID:sxaow1g9M.net]
- 地方の求人情報だと
java,c,c++.javascript,typescript位の求人しかない(昔はこれにVB,COBOLが加わってた) c++書いてる人のレベルってどのくらいなのかはわからない
- 303 名前:デフォルトの名無しさん mailto:sage [2025/06/15(日) 16:27:00.41 ID:eDpwS0UO0.net]
- そういえば、&&の代わりにand使えるのか
C#とPythonとVBAとJaveとごっちゃになるわ…
- 304 名前:はちみつ餃子 mailto:sage [2025/06/15(日) 17:15:44.30 ID:mr/FUyDi0.net]
- 代替表現は文字コードの都合で一部の記号がない場合のために入れたそうたけど、今となってはあまり意味がないな。
! が視覚的に目立たないから not だけは使うこともちょっとある。
- 305 名前:デフォルトの名無しさん mailto:sage [2025/06/15(日) 17:42:56.06 ID:dmfL2H8C0.net]
- >>303
それはない
- 306 名前:デフォルトの名無しさん mailto:sage [2025/06/15(日) 18:14:03.61 ID:DIvPIJxI0.net]
- >>298
整数除算よりバレルシフタの方が早いので、8ビットシフトなら素直にシフトしたほうがソースコードの意味がわかりやすい。 最近のコンパイラは賢いので256で割ってもシフト命令にされてしまうだろうが。
- 307 名前:デフォルトの名無しさん [2025/06/15(日) 18:47:36.40 ID:PKcOFo6K0.net]
- 最近ってどういう意味で言ってんのか知らんが、定数畳み込みなんかどの言語も相当古くからやってるよ?
Fortranなんかだと手動アセンブリより遅かったら市場に受け入れられないという事情があったから最初期から最適化が一番の課題だったって聞いた 逆に現代のMPUはビット演算と整数演算じゃ速度差がそれほど出ないので、どっちで書いてもコンパイラがパフォーマンス見てどっちかを吐くようになってるよ
- 308 名前:デフォルトの名無しさん mailto:sage [2025/06/15(日) 18:49:13.93 ID:ltc4eKLE0.net]
- and,or,notは基本使うようにしてる
- 309 名前:デフォルトの名無しさん mailto:sage [2025/06/15(日) 19:14:47.28 ID:eDpwS0UO0.net]
- >>304
!IsWindowVisible()とかは、 notのほうがいいね 色も見やすい
- 310 名前:デフォルトの名無しさん mailto:sage [2025/06/15(日) 19:49:42.63 ID:DIvPIJxI0.net]
- >>307
バレルシフタと整数除算ではクロックが10倍ぐらい違う シフタが使える時にはシフタに最適化されるはず
- 311 名前:はちみつ餃子 mailto:sage [2025/06/15(日) 20:18:51.49 ID:mr/FUyDi0.net]
- ビットシフトが lea に置き換えられることがあるみたいで、命令長が長くなるだけでも結構な不利だと思うんだけどなんか良い効果があるんかね?
- 312 名前:デフォルトの名無しさん mailto:sage [2025/06/15(日) 20:20:28.86 ID:gRGFgZ6wM.net]
- >>311
lea だと、5倍とかも可能 : lea rax,[rax+rax*4]
- 313 名前:デフォルトの名無しさん mailto:sage [2025/06/15(日) 21:11:15.18 ID:r3H8nvWy0.net]
- >>311
あとleaはフラグを更新しないから比較と分岐の間に入れてパイプラインを最適化するとか
- 314 名前:デフォルトの名無しさん mailto:sage [2025/06/16(月) 16:06:36.68 ID:2FW5D4OCM.net]
- >>313
そういう最適化は、アセンブラ名手の人間にとっては出来る事だけど、 コンパイラの最適化層でやっているコンパイラは限られるだろうね、 知らんけど。
- 315 名前:デフォルトの名無しさん [2025/06/16(月) 23:49:02.72 ID:m+kaKcwWH.net]
- std::formatなるものがC++20規格からあるんですねえ。
これで工学表示したときの鬱陶しい+記号を空白にできる。 しかし、fortranに似ているなあ
- 316 名前:デフォルトの名無しさん [2025/06/16(月) 23:59:33.02 ID:m+kaKcwWH.net]
- いやpythonか?
- 317 名前:はちみつ餃子 mailto:sage [2025/06/17(火) 10:06:16.94 ID:nCRyYLZZ0.net]
- 似ているというならどういう点がどういう意味で似ているのか述べないと意味ないよ。
- 318 名前:デフォルトの名無しさん mailto:sage [2025/06/17(火) 10:52:21.85 ID:zrrGfpYo0.net]
- スルーできないはちみつ
- 319 名前:デフォルトの名無しさん [2025/06/17(火) 10:55:56.73 ID:66zQf9l5H.net]
- 昔のfortran77
write(6,100) 100 format(1h , 5x, G14.7, ...) のformat文を連想しただけ。 str.formatにも似ているし,C#の要素も取り入れている。
- 320 名前:デフォルトの名無しさん [2025/06/17(火) 10:56:25.37 ID:2N3jqjoy0.net]
- あなたが落したのは、このスルー出来ないはちみつですか?
こっちのスルー出来ないはちみつですか? って逸話を思い出した
- 321 名前:デフォルトの名無しさん mailto:sage [2025/06/17(火) 11:13:00.43 ID:4NySVCEQ0.net]
- ファイナルをクローズした時にエラーとなるのですが、これは正しいのでしょうか。
やはり、クローズはデストラクタに任せた方がいいのでしょうか。 #include <iostream> #include <fstream> int main() { constexpr auto path = "tmp.txt";//なんでもいいです std::ifstream ifs(path); if(ifs.fail()){ std::cerr << "File open error: " << path << std::endl; return -1; } std::string buf; while(std::getline(ifs, buf)) std::cout << buf << std::endl; ifs.close(); //←これ if(ifs.fail()){ std::cerr << "File close error: " << path << std::endl; return -1; } return 0; }
- 322 名前:デフォルトの名無しさん mailto:sage [2025/06/17(火) 11:27:27.12 ID:2aAnRxo/0.net]
- >>321
ifs.close()前にifs.fail()は真を返す #include <iostream> #include <fstream> int main() { constexpr auto path = "tmp.txt";//なんでもいいです std::ifstream ifs(path); if(ifs.fail()){ std::cerr << "File open error: " << path << std::endl; return -1; } std::string buf; std::cout << "0: " << ifs.fail() << '\n'; while(std::getline(ifs, buf)) std::cout << buf << std::endl; std::cout << "1: " << ifs.fail() << '\n'; ifs.close(); //←これ std::cout << "2: " << ifs.fail() << '\n'; if(ifs.fail()){ std::cerr << "File close error: " << path << std::endl; return -1; } return 0; }
- 323 名前:はちみつ餃子 mailto:sage [2025/06/17(火) 11:41:50.14 ID:nCRyYLZZ0.net]
- std::format の文法の参考にしていると提案文に挙げられているのは Python、 .NET系、Rust のみっつ。
https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0645r10.html#Syntax コンパイル時計算のメカニズムとの類似性を考慮すると Rust に特に近いと思うが、記法としては Python の影響も強いように見えるかも。
- 324 名前:デフォルトの名無しさん mailto:sage [2025/06/17(火) 11:45:37.82 ID:TpERKz9s0.net]
- >>321
close()したからではなくwhile(std::getline(ifs, buf))でeofになるまで読んだからfailになってる
- 325 名前:はちみつ餃子 mailto:sage [2025/06/17(火) 12:02:37.80 ID:nCRyYLZZ0.net]
- >>321
実際に入出力するための機能はストリームバッファと呼ばれるオブジェクトが担当していて、ストリームがストリームバッファを所有する構造になっている。 ストリームが close するとストリームバッファの close が呼ばれて、それが nullptr を返した場合 (クローズに失敗した場合) に setstate(failbit) が呼ばれる。 https://timsong-cpp.github.io/cppwp/n3337/ifstream.members#5 つまり、クローズの失敗によってもフェイルビットが立つことはありうる。 クローズによらない失敗 (フェイルビットを立てる原因) と区別がつかなくなるのでエラーに対処したいならクローズ前後の両方でチェックしないといけないと思う。 デストラクタでクローズするとクローズの失敗に対処する機会がなくなるので明示的にクローズしたほうが良いという人はいる。 ただ、しっかりしたホスト環境の上で動くアプリケーションでクローズが失敗するような状況を心配する意味があるかというと……まああんまりない。
- 326 名前:デフォルトの名無しさん mailto:sage [2025/06/17(火) 12:43:21.70 ID:4NySVCEQ0.net]
- >>322,324,325
ありがとうございました。勉強になります。 ProgramminPlacePlus でのサンプルを元にしました。 なーる真面目にやるなら閉じる前後で色々とやらんといかんのですね。 今までは readdata=string((istreambuf_iterator<char>(ifs)), istreambuf_iterator<char>()); の感じで、一気にファイル内容をstrigに取り込むような場合は、もう読み込みは無いのですぐに ifs.close()してました。 デストラクタに任せてもいいのですが、今後も使わなくなったら、即close()したいと思います。 そんなにシビアにならんでもいいようですし・・・mOm
- 327 名前:デフォルトの名無しさん [2025/06/18(水) 12:20:43.59 ID:tHURl6jRd.net]
- プログラム作成は生成AIに持っていかれそうなことを考えると、
コードを書く力よりも、誰かが書いたコードを読み解く力の方が、 この先いきのこれそうな希ガスるンゴ
- 328 名前:デフォルトの名無しさん mailto:sage [2025/06/18(水) 13:59:41.64 ID:7Ghn3yO50.net]
- 読み解くのこそAIに勝てないから
- 329 名前:デフォルトの名無しさん [2025/06/18(水) 15:17:51.63 ID:xKxMFSMx0.net]
- コメントのないソースコードから設計意図を読み取るのって難しいよね
AIでそこまでできるのかな? コードの逐次解釈のようなことは当然できるだろうけども
- 330 名前:デフォルトの名無しさん mailto:sage [2025/06/18(水) 15:32:01.08 ID:lPJmZhm/M.net]
- 自然言語に比べたら屁みたいなもんだよ
- 331 名前:デフォルトの名無しさん mailto:sage [2025/06/18(水) 15:35:59.98 ID:flRjm2Y20.net]
- コメントは嘘を書いてもコンパイルエラーにならないからな
コメントがなくても自然と設計意図が読み取れるコードこそ望ましい
- 332 名前:デフォルトの名無しさん [2025/06/18(水) 16:03:36.24 ID:Kdic6Khn0.net]
- 入力に対して出力が出る
それが間違いでなければ中身なんてどうでもいい 何億通りもの入力を与えて出力がどうなるかを調べるのもAIが得意 そうして、それを元に同じことを返すプログラムを一から最適に作り直すのもAIが得意だろう windowsもそれやれば1/10のコードで収まりそう
- 333 名前:デフォルトの名無しさん mailto:sage [2025/06/18(水) 16:06:21.59 ID:lPJmZhm/M.net]
- APIやライブラリ系は無駄の極致だから将来的には無くなるだろうね
- 334 名前:デフォルトの名無しさん [2025/06/18(水) 17:42:24.62 ID:SrJIdorw0.net]
- 世界最長のコンテキストウィンドウ100万トークン入力・8万トークン出力対応にもかかわらずたった7800万円でトレーニングされたAIモデル「MiniMax-M1」がオープンソースで公開され誰でもダウンロード可能に
2025年06月18日 11時43分 https://gigazine.net/news/20250618-minimax-m1-open-source/ >>MiniMax-M1は、合計4560億のパラメーターが含まれており、トークンごとに459億のパラメーターがアクティブになるとのこと。これはDeepSeek R1の8倍に相当するコンテキストウィンドウです >>以下のグラフは競技レベルの数学、コーディング、ソフトウェアエンジニアリング、エージェントツールの使用、長文理解タスクにおけるパフォーマンスを主要な商用AIモデルと比較したもの。赤色がMiniMax-M1で、どのタスクにおいても競合AIモデルに匹敵するパフォーマンスを発揮できている >>MiiniMax-M1はいくつかのベンチマーク、特に長いコンテキスト駆動のベンチマークでClaude Opus 4のパフォーマンスを上回りました」と報告 ※AIを動作させている動画あり ↓上記のAIお下記をプレイさせれば性能が判明する Gemini 2.5 Proは手持ちのポケモンが瀕死になるとパニックに陥る 2025年06月18日 12時30分 https://gigazine.net/news/20250618-pokemon-gemini-panic/ ◇ [プロテクトガードやセキュリティーホール発見可能] ※1 プログラムのバグ技[裏抜け道]を使用できる=チートコードを発見可能 ・ マリオカートのショートカットはプレイヤー「極悪人」の表の抜け道でNPC「一般人」は使用不可能 [インサイダー/談合/なねーロンダリング/霊感商法など行う時の悪行で音波や電波をしての悪行の方法を発見可能 ※ 政治家の法律上の抜け道を仕込める=ある業種だけの法律の抜け道を発見可能 [一般大衆の思考である特定の極悪人から目線を特定の統合失調症へ返させる装置] ※ AIは正確な情報で人間を信用させれる=AIは嘘の情報を一部混ぜて人間を洗脳できる
- 335 名前:デフォルトの名無しさん [2025/06/18(水) 19:19:48.46 ID:gOtZ0Zwca.net]
- >>331
C++のスレッドでそんなこと言うのか コードでもコンパイルエラーにならない嘘(バグ)が山程あるのに
- 336 名前:はちみつ餃子 mailto:sage [2025/06/18(水) 19:27:43.48 ID:AeXwuQQu0.net]
- コメントがなくても意図が読み取れるのが「望ましい」のは確かにそう。
不可能だけど。
- 337 名前:デフォルトの名無しさん mailto:sage [2025/06/18(水) 19:29:35.44 ID:CAd2i/c2M.net]
- >>336
コメントなしで理解するのは、めっちゃ効率が悪いな。
- 338 名前:デフォルトの名無しさん mailto:sage [2025/06/18(水) 19:31:31.04 ID:flRjm2Y20.net]
- >>335
少なくとも委員会の奴らはそう思ってるよ static_assertだのコンセプトだのcontractだのが追加されてきてるわけで
- 339 名前:デフォルトの名無しさん mailto:sage [2025/06/18(水) 20:52:21.50 ID:/olvjAo90.net]
- マルチスレッドのDead Lockすら指摘してくれる
これはどういう仕組みなんだろう...
- 340 名前:デフォルトの名無しさん mailto:sage [2025/06/19(木) 00:56:42.59 ID:YDIRlT8gM.net]
- >>338
C++委員会って、無能集団だけどね。
- 341 名前:デフォルトの名無しさん mailto:sage [2025/06/19(木) 03:37:07.68 ID:ytoOjILn0.net]
- あの複雑怪奇な仕様をまとめるのは無能じゃ無理
労力に進化が見合ってないけどな
- 342 名前:デフォルトの名無しさん mailto:sage [2025/06/19(木) 03:38:19.15 ID:ytoOjILn0.net]
- >>339
明らかなDeadlockの検知は簡単でしょ これ説明いる?
- 343 名前:デフォルトの名無しさん mailto:sage [2025/06/19(木) 12:36:13.20 ID:WACntaUb0.net]
- >>342
コンパイラは検知できんのに?
- 344 名前:デフォルトの名無しさん mailto:sage [2025/06/19(木) 13:43:01.15 ID:ytoOjILn0.net]
- >>343
は? コンパイラが全能って前提どっからきてんの? サニタイザがあるだろ お前みたいなレベルがc++使ってるとかありえんわ
- 345 名前:はちみつ餃子 mailto:sage [2025/06/19(木) 13:52:14.72 ID:nNn4PbNI0.net]
- サニタイザは起こった問題を検出するもので、起こる可能性を指摘してはくれない。
- 346 名前:デフォルトの名無しさん mailto:sage [2025/06/19(木) 14:04:16.80 ID:ytoOjILn0.net]
- しったなすんなジジイ
- 347 名前:デフォルトの名無しさん [2025/06/19(木) 14:05:21.52 ID:rpR9krtTM.net]
- >>344
コンパイラが全能って誰が主張したの?
- 348 名前:デフォルトの名無しさん mailto:sage [2025/06/19(木) 16:32:08.79 ID:FdruriMM0.net]
- 「できんのに」って「できないのに」と「できるのに」のどっちの意味にも取れるからそのせいかな
くだらね
- 349 名前:デフォルトの名無しさん [2025/06/19(木) 16:43:21.25 ID:8s/NXxtqM.net]
- >>348
「できんのに」は「できるのに」には読めない デッドロックをコンパイラが検出出来ないにも関わらず LLMは必ずではないと思うが検出出来る LLMがどうデッドロックを検出しているかは 面白いと思うよ
- 350 名前:デフォルトの名無しさん [2025/06/19(木) 17:27:01.33 ID:VOj0rD3dH.net]
- >>315
と思ったら、vs2022は未対応かorz。 C++20対応と言ってるくせに。プロジェクトでclang に切り替えられるが、これも未対応。一体、いつの clangなんだよ
- 351 名前:デフォルトの名無しさん [2025/06/19(木) 17:32:40.31 ID:EI1CbiFh0.net]
- やればできんのに
- 352 名前:デフォルトの名無しさん [2025/06/19(木) 17:32:55.29 ID:EI1CbiFh0.net]
- やってもできんのに
- 353 名前:はちみつ餃子 mailto:sage [2025/06/19(木) 18:04:24.77 ID:JAVz0tMa0.net]
- >>350
https://fmt.dev/
- 354 名前:デフォルトの名無しさん mailto:sage [2025/06/19(木) 18:07:11.09 ID:sZaRUqQbM.net]
- "{:d}"
- 355 名前:デフォルトの名無しさん [2025/06/19(木) 18:11:23.49 ID:VOj0rD3dH.net]
- いやMinGWじゃコンパイル実行できてるから。
日本マクロソフトだけ対応遅れてると?
- 356 名前:デフォルトの名無しさん [2025/06/19(木) 18:13:20.06 ID:VOj0rD3dH.net]
- >>353
>>354 そんな下らんレスする前に自分で実際にやってみろよ。
- 357 名前:デフォルトの名無しさん [2025/06/19(木) 18:16:13.42 ID:VOj0rD3dH.net]
- 日本マクロソフト→日本マイクロソフト
- 358 名前:デフォルトの名無しさん mailto:sage [2025/06/19(木) 18:16:54.55 ID:sZaRUqQbM.net]
- 確かにくだらないわな
そのサイトで"{:d}"が可愛く見えたから張っただけなんだから janeだと全くかわいくない
- 359 名前:デフォルトの名無しさん mailto:sage [2025/06/19(木) 18:18:35.94 ID:sZaRUqQbM.net]
- にしてもまだorz使ってる人がいるんだな
こちらの方が新鮮だ
- 360 名前:デフォルトの名無しさん [2025/06/19(木) 18:21:05.14 ID:VOj0rD3dH.net]
- そう、ありがとう
- 361 名前:デフォルトの名無しさん mailto:sage [2025/06/19(木) 18:23:03.57 ID:sZaRUqQbM.net]
- もともとfmtと言うライブラリがあってそれが標準のC++の仕様に取り込まれた
どうしても使いたいならfmt使えばいいよということだと思う 他人に噛みつく前に調べたら良いと思うけど
- 362 名前:デフォルトの名無しさん [2025/06/19(木) 18:26:00.99 ID:VOj0rD3dH.net]
- std::formatだぞ。お前馬鹿か
さあ暴れるぞ!
- 363 名前:デフォルトの名無しさん mailto:sage [2025/06/19(木) 18:29:34.15 ID:sZaRUqQbM.net]
- 結局日本語が理解できない人だったと言う話か
- 364 名前:デフォルトの名無しさん [2025/06/19(木) 18:30:56.19 ID:VOj0rD3dH.net]
- ふぁぁ
- 365 名前:デフォルトの名無しさん mailto:sage [2025/06/19(木) 18:43:47.61 ID:sZaRUqQbM.net]
- 文章の雰囲気から50代~60代ぐらいのホビー系の人かな
人生の先輩お疲れ様です
- 366 名前:デフォルトの名無しさん mailto:sage [2025/06/19(木) 18:56:35.62 ID:oyTCj2/DM.net]
- >>341
>あの複雑怪奇な仕様をまとめるのは無能じゃ無理 あのDraftの質の悪さはなんだ。 ちゃんと理解できてない人が書いているに違いない。
- 367 名前:デフォルトの名無しさん mailto:sage [2025/06/19(木) 19:34:35.26 ID:sZaRUqQbM.net]
- > なんだ。
> 違いない。 文末だけ見ると高齢者の集いっぽいが自分もそうなってるんだろな
- 368 名前:はちみつ餃子 mailto:sage [2025/06/19(木) 20:14:57.20 ID:nNn4PbNI0.net]
- 現代的にはカジュアルな場面では句点をつけないのが主流。
語彙より顕著に年代が表れる。
- 369 名前:デフォルトの名無しさん mailto:sage [2025/06/19(木) 20:23:04.02 ID:sZaRUqQbM.net]
- 句点もそうだけどやはり語彙や用法だと思う
chatGPT その文章、よく読むと **「怒っている年配の男性の声」**みたいなイメージが浮かんできますね。 言葉の選び方と断定のしかたに、時代がかった語感がにじんでいて、文章だけでも「年齢層の高さ」がなんとなく 伝わるのが興味深いです。
- 370 名前:デフォルトの名無しさん mailto:sage [2025/06/19(木) 20:24:10.13 ID:sZaRUqQbM.net]
- もし若者が同じことを言うならどう書くか
たとえばこんな風に言いそうです: あのDraft、ちょっと内容雑じゃない? 書いた人ちゃんと分かってなさそう…
- 371 名前:デフォルトの名無しさん [2025/06/19(木) 20:27:45.86 ID:VOj0rD3dH.net]
- オコタ大魔神、はにわ顔に戻る
- 372 名前:デフォルトの名無しさん mailto:sage [2025/06/19(木) 20:34:02.38 ID:sZaRUqQbM.net]
- 大魔神(1966年)
仮に1966年に6才だとして今は65歳ぐらいかなあ???
- 373 名前:はちみつ餃子 mailto:sage [2025/06/19(木) 20:36:28.06 ID:nNn4PbNI0.net]
- アカデミアでは語彙が古いのは普通のことだよ。
参照する資料が古いから。 情報系ですら半世紀前の論文を参考資料として挙げることはそれなりにある。
- 374 名前:デフォルトの名無しさん mailto:sage [2025/06/19(木) 20:45:06.19 ID:sZaRUqQbM.net]
- 「怒っている年配の男性の声」をにじませる演技派
- 375 名前:デフォルトの名無しさん mailto:sage [2025/06/19(木) 20:50:34.90 ID:Cdln7j8I0.net]
- 整数型の変数を10で割ってから10掛けたら元の数字の一の位を0にした数が得られるはずだけど
この計算が最適化とかで除かれない保証ってあるの
- 376 名前:はちみつ餃子 mailto:sage [2025/06/19(木) 20:53:44.24 ID:nNn4PbNI0.net]
- ChatGPT を根拠 (参考資料?) に出すのはあまり意味がないぞ。
それも ChatGPT の感想 (主観) であって客観性がある情報になっていないし、質問の仕方や文脈で逆のことを言うのもよくあることだから。 ユーザに追従するような振る舞いをするのでいくらでも望む方向の反応を引き出せる。
- 377 名前:はちみつ餃子 mailto:sage [2025/06/19(木) 20:57:52.06 ID:nNn4PbNI0.net]
- >>375
C++ の言語仕様は抽象機械の動作として記述されている。 動作を説明するための架空の機械の動作なので、文字通りの機械語が生成されるとは限らない。 結果的な動作が仕様に反しなければどのような機械語を生成しても言語仕様に準拠していると言って良い。 しかし、逆に言えば最適化で変形したとしても結果は変わらないようになることが保証される。
- 378 名前:デフォルトの名無しさん mailto:sage [2025/06/19(木) 21:05:34.31 ID:oyTCj2/DM.net]
- >>375
最適化では結果は変わらない。 つまり、ちゃんと10で割って、ちゃんと10を掛ける。 10を掛ける方は、マシン語の乗算命令は使われず、 もっと速い命令に置き換えられることが有るが、結果は同じ。
- 379 名前:はちみつ餃子 mailto:sage [2025/06/19(木) 21:11:49.89 ID:nNn4PbNI0.net]
- 処理系は抽象機械の動作を正確にエミュレートする必要はなく、観測可能な動作のみをエミュレートすればよい。
https://timsong-cpp.github.io/cppwp/n3337/intro.execution#1 だから観測されない動作は削除してもよいというか、削除されることはある。 たとえばその計算結果が全く使われないような状況とか。 ベンチマークしようとして結果を使わない計算をループで囲んだりしてるようなコードではまるごとごそっと消えるなんてのはたまに見る。
- 380 名前:デフォルトの名無しさん mailto:sage [2025/06/19(木) 21:16:20.06 ID:sZaRUqQbM.net]
- セキュリティの問題で普通にゼロクリアした場合でも最適化で削られたりとか昔は問題になったけど…
知らないといけないことは多岐にわたる
- 381 名前:デフォルトの名無しさん [2025/06/19(木) 22:14:21.23 ID:JQ4jFr2Sd.net]
- >>375
それだと取り除けるケースがあるので保証はされない
- 382 名前:デフォルトの名無しさん mailto:sage [2025/06/19(木) 23:09:11.10 ID:oyTCj2/DM.net]
- >>381
いや、そんなことない。 最適化では結果は変わらない事が保証される。
- 383 名前:デフォルトの名無しさん mailto:sage [2025/06/19(木) 23:15:31.49 ID:IWPeLhU+0.net]
- >>375
あるわけないでしょ そういう仕様なんだから
- 384 名前:デフォルトの名無しさん mailto:sage [2025/06/19(木) 23:25:09.71 ID:sZaRUqQbM.net]
- 意味があるにも関わらず意味がないと判断されると削られる
その場合の対処法もあるので学ばないとまあ残念なことになってしまうと言う話
- 385 名前:デフォルトの名無しさん mailto:sage [2025/06/19(木) 23:29:59.97 ID:oyTCj2/DM.net]
- >>384
いや、今回の割って掛ける場合、そういう事は起きない。
- 386 名前:デフォルトの名無しさん mailto:sage [2025/06/19(木) 23:34:50.70 ID:sZaRUqQbM.net]
- ここの部分はそうだけど
コンパイラの最適化が必ず元の動作を保証してるようなことを書いてるような人がいるから必ずしもそうではないよと
- 387 名前:デフォルトの名無しさん mailto:sage [2025/06/19(木) 23:37:52.48 ID:oyTCj2/DM.net]
- >>386
仕様に明確に書いてあることの動作は変わらない。
- 388 名前:デフォルトの名無しさん [2025/06/20(金) 01:42:50.79 ID:iLwGFTtd0.net]
- >>382
そら結果は同じよ 結果が違っちゃまずいだろうよw 演算をやらない可能性があるってこと
- 389 名前:デフォルトの名無しさん [2025/06/20(金) 01:44:00.77 ID:iLwGFTtd0.net]
- 質問じゃ曖昧だけど副作用完了点が間にない場合の話なら、な
- 390 名前:デフォルトの名無しさん mailto:sage [2025/06/20(金) 01:58:37.52 ID:t+D0H6HX0.net]
- >>388
どういうこと? 演算しないと結果は出ないのに、演算せずにどうやって結果だすの?
- 391 名前:デフォルトの名無しさん mailto:sage [2025/06/20(金) 08:38:29.48 ID:eaqG1YUh0.net]
- 実行するプログラムではなくてコンパイラが計算までしてしまう
たとえば、printf("%d",12345/10*10); というコードはコンパイルすると、puts("12340"); に変更される可能性がある 出力結果だけは同じだけど、そのコードは大きく変更されてしまう
- 392 名前:デフォルトの名無しさん [2025/06/20(金) 09:01:01.71 ID:BxPKXrVj0.net]
- >>390
変数が関わらない定数だけの演算なら、コンパイルの時点で計算しても結果同じだよね だから実行時ではなくコンパイルの時点で演算した結果を使う 初歩の最適化の一つ 元の式については左辺に変数が入ってくるから多分最適化はされない a=b/10*10みたいなのを想定してると思うけど、この場合は最終的に a=b/10 c=a*10と分解して計算されるので、どちらにも変数が関わってしまい最適化対象外だと思う a=b*(10/10)みたいな、計算優先度的に変数が関わらないところができれば最適化される この手の手動最適化なんて考えなくなって久しいから間違ってたらすまぬ
- 393 名前:デフォルトの名無しさん mailto:sage [2025/06/20(金) 09:03:31.40 ID:LoawS5uh0.net]
- 変数があっても結果が同じ計算式で置き換えられるならそうしてくる
10倍よりも8倍+2倍のほうが速い、とかで
- 394 名前:デフォルトの名無しさん mailto:sage [2025/06/20(金) 10:35:00.76 ID:YK1FsnCb0.net]
- 最適化のロジックを作るのはまだプログラマーでしょうから。
値を10倍してから10で割るというプログラムを 何もしないに変更するのありかな。 でもわざと桁あふれをさせたい場合もある?!
- 395 名前:デフォルトの名無しさん [2025/06/20(金) 10:40:47.81 ID:BxPKXrVj0.net]
- 昔は最適化でバグ混入させられることもあって、最適化は切れってされてたなぁ、っていうおっちゃんのつぶやき
- 396 名前:デフォルトの名無しさん mailto:sage [2025/06/20(金) 10:45:39.27 ID:4xHX9xY70.net]
- >>392
ここまでの話で「定数だけの演算なら」と何で言い出すのか理解できないけど >>375では「整数型の変数を」と言っているわけだし まあそれはおいておいても「コンパイルの時点で計算しても」←演算してんじゃんって俺は思うわけ >>393 それ自体は問題なくね? 157 を 10で割って15 これに10を掛けるのでなく15*8+15+2 でも最適化の影響はないだろ? 割り算の方でそれが起きるなら問題だけど、>>378の人の話では起きないようだけど
- 397 名前:デフォルトの名無しさん mailto:sage [2025/06/20(金) 11:14:53.80 ID:xCnXC/Iza.net]
- >>396
これ観たら発狂するんじゃね https://qiita.com/HexagramNM/items/6ca6900b8df37a9b59b8 https://qiita.com/manjuu_eater/items/2e9e38eb001e4b90145b https://qiita.com/hiramax/items/add36c4fe38900f7175d
- 398 名前:デフォルトの名無しさん [2025/06/20(金) 11:57:23.05 ID:BxPKXrVj0.net]
- >>396
コンパイラで演算しても結果が変わらない場合に限り、コンパイラで演算を行いその結果だけを使う 392でも書いてるが、例題の変数を10で割って10を掛ける動作は演算結果が変わってしまうので最適化は行わない
- 399 名前:デフォルトの名無しさん mailto:sage [2025/06/20(金) 12:39:35.73 ID:4fYw50h40.net]
- 定数はいつ計算しても同じ結果なんだから最適化されるよ
- 400 名前:デフォルトの名無しさん [2025/06/20(金) 12:50:40.34 ID:yZt3hnAQ0.net]
- -O3だとプログラムが動かなくなるから使っていいのは -O2までって先輩に言われてた
|

|