[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 05/26 04:38 / Filesize : 273 KB / Number-of Response : 1048
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part160



1 名前:デフォルトの名無しさん [2022/04/15(金) 08:39:32.42 ID:WMzvufu2.net]
前スレ
C++相談室 part158
https://mevius.5ch.net/test/read.cgi/tech/1645239402/

998 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 08:26:59.91 ID:biGldfGz.net]
どっちにせよチョコを取りに行ったりくれたりする主体は進駐軍の兵隊オブジェクト
さらに進駐軍の兵隊オブジェクトが倉庫の受付に「Get chocolate」言うかもしれんし
そうすると進駐軍の兵隊オブジェクトがチョコレートを受け取る主体にもなり得る
こういう入り組んだ解釈を一切禁止ということならやっぱ複文禁止しか……
それはそれで新しいプログラミングパラダイムが拓けそうやがどうかなあ……

999 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 08:31:45.87 ID:biGldfGz.net]
ていうかそういうのはどうでも良いんですよそれよか>>695
のコードについて質問なのですが

fouri()の中に
 sin1 = table[t0];
 cos1 = table[t1];
というのがあって、cos1 + i * sin1が1の原子2^N乗根だと思うじゃん?
しかし動きを見ると5.333333乗根とか(これはまだわからないでもない
4.571429乗根とかわけわかんない数値が入って来るんですがなんで?!
ボスケテ、

1000 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 08:42:58.01 ID:1bxUvska.net]
>>957
(1 << p) が一周
(1 << p - i) は一周を(1<<i)で割った値、つまり(1<<i)乗根

1001 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 19:33:47.78 ID:0DaneQt4.net]
 
 __     __  ___ _____  _____     ___ ___    ___
 |   |    /  /  |  //       | /__  __/ [][] _| |_| |__ _| |_
 |   |.   /  /  /  / /   / ̄ ̄|. l    / /     |    _  | |_  レ'~ ̄|
 |   |  /  /  /  / /   /.  / /    |  |___      ̄|  | / / /   /| |
 |   |  /  /  /  / /    ̄ ̄ /     \__|     |  |  ̄ /_  /  | |_
 |   |. /  /  /  / /   / ̄ ̄ ̄                |_|     |__|   \/
 |   |/  /  /  /. /   /  
 |.     /  /  /  /   / 
 |    /. /   | ./   /  
  ̄ ̄ ̄   ̄ ̄ ̄.  ̄ ̄ 

1002 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 20:11:14.93 ID:biGldfGz.net]
>>958
1<<i乗根は結局2^i乗根ということで、
(2*M_PI)/atan2(sin1, cos1)が2^iすわなち整数にならないとおかしいんじゃないの
しかし実際は16乗根とか64乗根に交じって5.333333乗根とか4.571429乗根とかが混じってくるのでつ∀`;)

1003 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 21:44:19.34 ID:jg8JP3/X.net]
そりゃ(1<<i)乗根をn乗してるからねえ
出てくるんじゃないの?
何か問題?

1004 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 23:00:09.02 ID:biGldfGz.net]
わかりた
(1 << i)/jが割り切れない場合のw^jかorz

1005 名前:デフォルトの名無しさん [2022/05/20(金) 23:24:07.63 ID:mAopBTqL.net]


1006 名前:}クロでしか実現できない機能って何がありますか?
派遣先のライブラリがマクロだらけで驚いたので気になりました
[]
[ここ壊れてます]



1007 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 23:38:17.88 ID:Nu0nVGPY.net]
メタプログラミングとか?

1008 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 23:48:21.44 ID:5lKx3hyB.net]
いろいろあると思うけど、ログ関数とか作るときに関数名とか行数とか出力させたかったらマクロ使うかな

1009 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 23:53:08.67 ID:sn/66v3t.net]
行数とかなんか無茶なコードの結合とか

1010 名前:デフォルトの名無しさん [2022/05/21(土) 00:17:23.34 ID:SL+9c0t4.net]
コンパイラによってつける属性変えるときとか
public:をオンオフしたり構文に影響を与えるものとか

MSVCの標準ライブラリ覗くと
#define _CONSTEXPR20 constexpr
//#define _CONSTEXPR20 inline //C++17以前
とか書いてあったりする

式を文字列として展開するのもマクロじゃなきゃできない
#define A(exp) #exp

文字列連結(#define A(a1,a2) a1##a2)もマクロじゃなきゃできないけどデバッグが無理ゲーになるから使わん

1011 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 00:19:10.39 ID:DcWHGr0j.net]
__FILE__や__LINE__を使うのを隠蔽したいときはマクロにするしか、
あと文字列を結合してシンボルを合成するとか、
#define cat(a, b) a##b
#define cat2(a, b) a/**/b

1012 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 00:53:48.99 ID:SKvcmC+r.net]
マクロでぐにゃぐにゃしてる中はデバッガで止めづらくなるね
文字列生成(そして文字列の連結) 識別子の連結 はプリプロセッサじゃないとできないし

1013 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 01:31:55.43 ID:wrIep829.net]
初見殺しにマクロは必須

1014 名前:ハノン mailto:sage [2022/05/21(土) 06:57:00.43 ID:0jWT+RR4.net]
というか、inline 指定を絶対化すればいいだけ
どうして inline 指定してもインラインされない場合がある、とか勝手なことをするのか不明

1015 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 07:00:24.57 ID:LKZ4AMgL.net]
#define AAAA xxxx
#include "****"
#undef AAAA

#define AAAA yyyy
#include "****"
#undef AAAA

1016 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 07:11:17.89 ID:DcWHGr0j.net]
>>971
再帰する場合は仕方が無い
ポインタ経由で呼び出す場合も仕方が無い



1017 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 08:09:54.00 ID:0jWT+RR4.net]
>>973
閾値を決めて閾値を超えてとまらないことがわかったら「エラーを出してコンパイルを止める」べきで、勝手に inline を無視してコンパイルしなおすなんて言語道断、コンパイラ作者の独善だね

1018 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 08:21:34.76 ID:/PQRaHnB.net]
今やregisterなみの存在感

1019 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 10:25:33 ID:qJClzxWq.net]
#includeと#defineで疑似メタプログラミング的なことをすることはある
テンプレート化出来ない場合もあるからな

1020 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 10:48:13.19 ID:Kirg9sMV.net]
constexprが中途半端で結局constevalが追加されたのに倣えば、inlineの強制バージョンも標準化していいはずだよな
既に独自実装のalways_inlineや__forceinlineはあるんだし

1021 名前:はちみつ餃子 mailto:sage [2022/05/21(土) 11:13:07.39 ID:JD6rd3hb.net]
C++ は見かけ上の動作が仕様通りならどういう機械語を生成するか規定しないのが原則だから……。
言語仕様的には constexpr やら consteval も定数式として使える範囲を拡大しただけで、生成される機械語に対しては要求をしてない。
(想定はしていると思うけど。)

1022 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 11:49:29.76 ID:DcWHGr0j.net]
翻訳系の仕事はソースコードの意味を変えずにオブジェクトコードに翻訳することで(ry
狭義のアルゴリズム(

1023 名前:シングルスレッド条件、有限ステップで結果出力)の入力と出力の関係が翻訳前後で同じ結果になるならおk
最適化はボランティア活動みたいなもん
だいたいコルモゴロフ複雑性的な意味で一意な解など一般に無いし
[]
[ここ壊れてます]

1024 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 12:00:28.50 ID:DcWHGr0j.net]
ていうかDFTと逆DFTおよび4n乗根のDFTと逆DFTができましたよ
https://ideone.com/uK9v58

n語のフーリエ変換にメモリを2n語使って良いなら話は簡単やが
>>695 のソースコードはn語で済ませているから黒魔術を駆使しているに違いない
>>695 の作者は漏れよか頭良すぎ(いやいい意味で、

1025 名前:ハノン ◆QZaw55cn4c mailto:sage [2022/05/21(土) 14:44:04 ID:0jWT+RR4.net]
>>978
>C++ は見かけ上の動作が仕様通りならどういう機械語を生成するか規定しないのが原則だから……。
だとすると、inline の存在自体が原則に大きく矛盾していることになりますねえ

1026 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 14:47:32 ID:is6KmnjI.net]
あくまでもヒントじゃないのか



1027 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 15:01:05.79 ID:0jWT+RR4.net]
>>982
そんな曖昧な態度だから、マクロによるインラインが跋扈してしまうんです、inline に限っては強制力を伴うべきでしょう、#define マクロを葬り去りたいのなら

1028 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 15:01:21.03 ID:OwY6A3+8.net]
そう
あくまでヒント

ヒントになった理由は
世の中のプログラマーがアホだから

1029 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 15:01:54.43 ID:OwY6A3+8.net]
#defineは永遠に不滅です

1030 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 15:23:50.89 ID:ocVGFLUP.net]
CRTPにするとインターフェース継承してもインライン展開されるのほんとまじ意味わからん

1031 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 15:35:03.49 ID:0jWT+RR4.net]
>>984
マクロ跋扈とを許す設計者の方がもっとアホですね

1032 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 15:39:45.82 ID:LSoM7sSc.net]
誰の方がアホとかどうでもよくて
アホだからそういう仕様になった

1033 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 16:03:58.87 ID:DcWHGr0j.net]
ちと別件に取り掛かったのでソースコードを見ながらではなく想像やが
>>695 のソースコードでやっている頻繁なswapの意図がわかった希ガス
 X(k) = Σ[j=0..n-1]{ x(j) * w^(j*k) }
を計算するとき項の足し合わせ順序はどうでも良く、かつk>1なら
 j * k = 0 (mod n)  --- (1)
となるx(j) * w^(j*k)が複数回現れるから、(1)を満たす項の出現回数が大きいものを最初に足し合わせたらたちまち
(出現回数)-1語 のメモリが空く、というのが基本的着想で、
これを異なるkについて繰り返し行う場合(1)を満たす最大の出現回数となるjの系列jはk毎に相違するから、
kについての繰り返しについても部分計算を片付けてメモリを空けつつ進められ、
結局jとkの2重ループについてメモリを空けつつつつがなく進められるというしくみ(多分

1034 名前:はちみつ餃子 mailto:sage [2022/05/21(土) 16:11:12.45 ID:JD6rd3hb.net]
>>981
inline は ODR の例外。 また、異なる翻訳単位の同じ定義が統合されることを保証する。
これは C++98 のときからそう。
インライン化が望ましいことの指示であるとは書いてあるけど、
今では変数にも inline を付けることが出来るようになったのはもはや inline は ODR の例外としての意味がメインだと考えるべき。

1035 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 16:29:48 ID:9lV47uLv.net]
>>981
展開を強制したいならforceinlineあるやんけ(メジャーなコンパイラの拡張だけど

1036 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 16:47:52.13 ID:x3bK44aY.net]
onlineも導入すべき



1037 名前:デフォルトの名無しさん [2022/05/21(土) 17:00:45.58 ID:+x02zxlN.net]
>>952
こんなのあるんか便

1038 名前:利そうだな
まあ汎用的なデータ構造だと暫定未定義にするだけでもいいと思うけど、用途が決まってるクラスに関しては制約をつけたものを用意しておくのが無難だろうね
[]
[ここ壊れてます]

1039 名前:ハノン mailto:sage [2022/05/21(土) 17:25:58.12 ID:0jWT+RR4.net]
>>991
情報ありがとうございます。

>>990
ここで One Definition Rule がリファーされるのに直観的違和感を覚えます‥‥
が、反論はゆっくり考えますのでしばらくお待ちください、様々な視点を提供いただき感謝しております

1040 名前:はちみつ餃子 mailto:sage [2022/05/21(土) 17:56:26.14 ID:JD6rd3hb.net]
>>994
inline というキーワードの選択が不自然なのはわかるが inline はインライン化の指示というよりは
インライン化に都合のよいように制限する指示と考えるとそんなに不自然でもない。

① C/C++ は翻訳単位ごとに個々にコンパイルしてからリンクする手順を取る
② 他のコンパイル単位にある定義の内容はわからんのでインライン化するためには翻訳単位の中に定義がある必要がある
③ ヘッダに関数定義を書きたい
④ ヘッダに定義を書くと ODR 違反やろ
⑤ じゃあ ODR の例外を設けよう。 inline って付けたら ODR の例外な!

1041 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 18:53:36.34 ID:0jWT+RR4.net]
>>995

>>995 でいう定義は宣言に置き換えるべきでは?
ODR はあくまでも定義の話であって、宣言の話ではないかと考えます、私の勘違いでしょうか?

実装的には inline のついた関数定義が外部にリンクされる可能性があれば、すなわち extern な iniline 関数があれば、リンクのためのコード体を、各所に inline に展開されるコード体とは別に(こっそり)用意しておく、見たいな感じで十分に実装可能ですね

1042 名前:はちみつ餃子 mailto:sage [2022/05/21(土) 19:24:52.72 ID:JD6rd3hb.net]
>>996
外部に見せる用の実体のある定義は実際に用意される実装が多いと思う。
でも、その外部では実体を参照することは出来てもインライン化できないよね、各翻訳単位で定義が存在する必要があるよねということを言ってる。

その上で現在では LTO が普及したのでどうでもよくなったけど。

1043 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 20:03:09.89 ID:0jWT+RR4.net]
>>997
なるほど、やっと理解しました

LTO: Link Time Optimization ですか‥‥、トラブルの元で胡散臭いと思っている私は古い人なんでしょうね‥‥、.obj がコンパイラ固有になるのも嫌ですし

1044 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 20:12:03.42 ID:kYXfaM+5.net]
海外の専門用語はわかりにくいのう
日本風にリンオプとか略してくれればいいのに
イニシャリズムみたいな言い方だとなんて言うんだろ

1045 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 20:15:04.92 ID:0jWT+RR4.net]
>>999
村上龍の「5分後の世界」では、略語は使うな、ちゃんと元の言葉を使え、と教育されていますね
ジョージ・オーウェルの「1984」では、略語は謀略的な意味で使われる(小説末尾の appendix: New Speak 解説のカテゴリーB)ようですね

これらに影響されて、略語を連発するのは望ましくないという言語観を私は持っていますが

1046 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 36日 11時間 35分 33秒



1047 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<273KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef