C++相談室 part160

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2022/04/15(金) 08:39:32.42ID:WMzvufu2
前スレ
C++相談室 part158
https://mevius.5ch.net/test/read.cgi/tech/1645239402/
638デフォルトの名無しさん
垢版 |
2022/05/05(木) 17:24:23.79ID:irZh29WM
ざっくりとした大きさや上下数桁はわかっても全体を丸々把握するのは厳しそう
2022/05/05(木) 18:10:40.93ID:wHYrtDCY
https://ideone.com/O1rs45
誰か助けてー。
ウエブのレクチャー見て書いたんだけど、一件通ったと思ったらほかのテストが通らない。
デコーダが悪いのだろうか?というか、解釈狂ってるかなぁ??マジ解らん。

アドバイスクレクレ。
2022/05/05(木) 18:12:32.63ID:wHYrtDCY
まじ わか らん
2022/05/05(木) 18:17:21.57ID:/C0Dx8BU
>>639
std::uniform_int_distribution<int> ui('A', 'z');

大文字小文字?
2022/05/05(木) 19:01:19.69ID:wHYrtDCY
Aのほうが数字的に小さいのですよ。
2022/05/05(木) 19:06:48.31ID:p/xHapT/
>>639
V.push_back({ { D[i] }, i }); は V.push_back({ D[i], i }); じゃないの?
644デフォルトの名無しさん
垢版 |
2022/05/05(木) 19:40:11.06ID:jNTEQQGI
>>639
プログラムの意図がわからんから投げたわ

1. Data型の<1>要素の意味はなんだよ。typedefした行のコメントに書いといてほしい
2. 関数名を流し見る限り、ソート・エンコード・デコードの3つの仕事がある。中途半端に仕事が混ざってない?
2022/05/05(木) 19:50:34.56ID:p/xHapT/
>>644
ブロックソートアルゴリズムの実装をしているだろう。
とすると size_t はソートバリエーションのインデックスを表していると思われる。
2022/05/05(木) 21:14:55.46ID:tw5Ro1fM
Wikipediaのブロックソートを実装しようとしているのなら、
あちこち違ってるんで、修正版を貼っておく。
https://ideone.com/q008E8
647デフォルトの名無しさん
垢版 |
2022/05/05(木) 22:10:21.31ID:CGnulbl/
int64_tとsize_tを暗黙の型変換を期待して混ぜて計算するとはまる?

(int64t - int64t) + sizet >= int64t
の比較をしたら2つ目のint64tが大きくなっても(とは言っても全ての値は10~-10くらい)boolの値はずっと1でした。
比較の前まで切り出してprintfすると正しい値が出るのですが、比較式に組み込むとおかしくなります。
sizetをint64tにキャストすると正しく動きました。

暗黙の型変換はsizetをint64tにしてくれないのでしょうか

環境はWSL2のg++です。

教えて下さい
2022/05/05(木) 22:59:30.02ID:MaGUTczU
>>647
色々と面倒な細かいルールはあるんだが、大まかには

・ 二項演算子は原則としては大きい側の型に揃えてから計算する (符号は符号無しが優先。 結果の型もそれ)
・ size_t の大きさは処理系定義 (符号無しであることは保証される)
・ signed な型が unsigned に変換されると変換後の型の最大値より 1 大きい値で mod をとった値になる

というのがこの場合にかかわる重要なルールだと思う。
size_t は処理系定義だからその環境でどうだかわからんが uint64_t 相当だと仮定するぞ。
int64_t - int64_t の型は int64_t で、 int64_t + size_t は uint64_t になる。
つまり int64_t-int64_t の値が負数の場合でも常に正の値に修正される。
しかも値として常に 10~-10 くらいということは、
unsigned な値への型変換規則によってかなり巨大な値になってしまう。
たぶんこれが意図しない挙動の原因だと思う。
2022/05/05(木) 23:03:22.90ID:MaGUTczU
>>648
符号無しが優先って書いちゃったけど、これは大きさが同等なら符号無しが優先ってことね。
大きさに差があるなら大きい方の符号が採用される。
(大きさって言ってるけど実際には順位 (rank) の序列が定められている。 まあ大きさの順なので実質同じやろ。)
2022/05/05(木) 23:06:38.57ID:2L8NgwAH
size_t が非負の32 bit なら、int64_t の範囲内だから、OK だけど、
size_t が非負の64bitなら、int64_tの範囲外で無理

int64_tの非負の範囲は、63bitしかないから
2022/05/05(木) 23:20:02.75ID:MaGUTczU
例としてこういうのがあるとわかりやすいかな。

#include <iostream>
#include <cstdint>

int main(void){
auto a=std::int64_t(6)-std::int64_t(8)+std::uint64_t(1);
std::cout << a << std::endl;
}

結果として 18446744073709551615 が表示される。
2022/05/05(木) 23:39:48.09ID:Hm4Z5Kkb
というわけで高速化すた、
https://ideone.com/TWKDT6

動きを見る限り、2^17179869183が計算が終わるまで手元のPCで8時間ぐらいの見込み

(検算)
次のぐらいなら一瞬で出る(小数点の位置が手抜きなので指数の解釈に注意
2^1000 = 0000001 0715086 0718626 7320948 4250490 6000181 0561404 8117055 3360744 3750388. x 10^298
2^171798 = 0000002 2448900 7901275 1700257 1990086 5699838 8910190 8350859 7305786 1643657. x 10^51713

2^171798は>>620のでは4秒かかかっていたやつが100 msぐらいで出る
653647
垢版 |
2022/05/05(木) 23:52:14.24ID:CGnulbl/
皆様ありがとう。
たいへん納得できました
2022/05/06(金) 07:02:57.27ID:kL1BvaNc
ゴメス8時間と言う見積は指数の桁を一つ少なかった2^1717986918で見積もってたorz
やったら最新状況は↓こんな感じでこの後4^9×5815 = 1,524,367,360秒 = 48.304年かかることに、。n_
Calculating 2^17179869183 ...
n=17179869183, mbuf sz=2 --- 0 sec
n=8589934591, mbuf sz=2 --- 0 sec
n=4294967295, mbuf sz=2 --- 0 sec
...(中略)...
n=8191, mbuf sz=180374 --- 24 sec
n=4095, mbuf sz=360748 --- 96 sec x 4
n=2047, mbuf sz=721494 --- 385 sec x 4.10
n=1023, mbuf sz=1442986 --- 1467 sec x 3.81
n=511, mbuf sz=2885970 --- 5815 sec x 3.96
2022/05/06(金) 10:53:36.44ID:2sf+UfT7
生きてるうちに終わりそうでよかった
2022/05/06(金) 12:17:44.01ID:DqDgjvgu
python超初心者スレでひな形を教えてもらってpythonでプログラミングしたところ、

2^17179869183

4.637182185095045843877145312775985050353215513064979818029199207764811280740258379690028942685133666E+5171655945

になるようです。
ご参考まで。精度等未確認ですが。
2022/05/06(金) 12:40:01.31ID:DqDgjvgu
>>656
ちなみにこの計算は、
128倍精度浮動小数点数の最大値の計算で出てくる式の掛け算で区切った左側の値です。

128倍精度浮動小数点数 (2^((2^(35-1))-1))*(2-(2^-4060)) 5171655946桁の値 有効桁数1222桁

(2^((2^(35-1))-1))*(2-(2^-4060))

9.274364370190091687754290625551970100706431026129959636058398415529622561480516759380057885370267332E+5171655945
という値になりました。

精度等確認できる方はお願いします。
仮数部の最終桁の値は丸めになっているようなので+1されている可能性があります。
2022/05/06(金) 13:36:52.82ID:dNZjdeLr
>>646
修正感謝。自分のコードに転写してみたらちゃんと動いた。
これちゃんとブロックソートか解らないけど、可逆ではあるので圧縮してみるね。
本当にありがとう。
2022/05/06(金) 15:08:33.81ID:dNZjdeLr
https://ideone.com/xxiusG
詐欺れなーい。LZWの1ワードが2バイトだと、若干損位で収束してしまうな。

何でだー。圧縮理論のはずだろ~~。
2022/05/06(金) 15:20:41.30ID:HAMEIRFi
延々同じようなことやってる低学歴さんたちって>>623見えんの?
2022/05/06(金) 15:25:15.07ID:P9K99Ehi
C++ のプログラムでサスペンド/復帰をお手軽に実装するための定番の方法ってないですかね?
USR1 を受け取ったらメモリの内容を丸々ファイルにダンプして、復帰するときはそれを読み込んで続きから実行、くらい簡単な仕組みが実現てきたら嬉しいです
2022/05/06(金) 15:25:29.57ID:bNsO3W2u
>>659
真の乱数データならどのような圧縮アルゴリズムでも縮まんよ
2022/05/06(金) 15:28:31.87ID:dNZjdeLr
>>662
噂によるとLZWはエントロピー圧縮では無いので出来ても良いかと思ったんだけど、駄目か。
根拠は辞書捨てるからだけどね。

とりあえず完成。
2022/05/06(金) 16:06:26.56ID:DVOROdCT
>>661
WM_POWERBROADCAST ggrks
665デフォルトの名無しさん
垢版 |
2022/05/06(金) 17:03:00.97ID:Ai+BgFMJ
圧縮方式がなんだろうと可逆圧縮はデータ長が短くなるケースがあるならデータ長が長くなるケースが必ずある

65536通りの表記がある2byteデータで、1通りが1byteに圧縮できるとしよう。(0x0000→0x00)
残りの65535通りから256通りの表現を奪うので(0x00から始まるパターンが作れなくなる)、3byte長で表現しなきゃいけないやつが出てくる。

このへんはトレードオフだが、テキストデータとか一定の傾向があるデータのデータ長を短くできりゃいいだろ?
ランダムデータとか圧縮済みデータを圧縮するなんて考えない
2022/05/06(金) 17:26:03.51ID:dNZjdeLr
>>665
まぁ、そうですね。
LZWの性質上、一回出たモノを辞書から洗って一個追加して辞書に返す。という事をやるのです。
エントロピー圧縮では無いので乱数を詐欺れたら無敵だったのですけど、現実は厳しい。
2022/05/06(金) 18:18:33.94ID:lqMO+ITd
データ圧縮時にあり得る最大伸長率をまとめたサイトをどこかで見たような記憶があったんだけど
あらためて探すと見つからない……。 幻だったんだろうか。
668デフォルトの名無しさん
垢版 |
2022/05/06(金) 18:30:36.95ID:jJyKyUF7
>>667
ZipBombとかやべーやつもいるから安全に展開できるかの仕様の確認目的かな?

正攻法での最大圧縮率とかだと話が変わってきそうだが
2022/05/06(金) 20:00:41.83ID:AeHK35lN
>>660
繰り返し二乗法は分かったのだが
modを取る大きい素数の選び方が分からないので教えてほしい
2022/05/06(金) 20:02:30.43ID:L9gk7Obb
>>664
Linuxではどうすればいいの?
2022/05/06(金) 20:05:10.12ID:O7Z7ebwH
内部クラスを外部クラスが継承するって不可能?
struct A : A::B { struct B {}; };という特殊な事やりたいんやけど前方宣言とかできないっぽいし無理やろか
2022/05/06(金) 20:10:36.04ID:DVOROdCT
>>670
SIGなんちゃら系だろ
知らんけど
2022/05/06(金) 20:36:05.94ID:bNsO3W2u
>>671
無理だろ
2022/05/06(金) 22:11:28.52ID:j0ngZiiW
>>623
無理だろ
2022/05/06(金) 23:29:10.82ID:j0ngZiiW
>>597
30分くらいで計算できた
2022/05/06(金) 23:34:15.82ID:j0ngZiiW
計算結果いる?
5GBくらいのテキストファイル
2022/05/07(土) 00:00:32.86ID:8cLtDCyH
ああもう48年後か…
おまいらまだ生きてるか?
2022/05/07(土) 00:32:32.99ID:hLdUgsLX
>>676
先頭100桁とE+の値(文字数でもいいです)と最後の20桁ください。
2022/05/07(土) 01:43:20.82ID:s6tDba0D
1ゲットズザー!!!111!!111!c⌒っ゚Д゚)っ
https://ideone.com/R3szJK

2^17179869183 is between
0000000 0000046 3718218 5095045 8438771 4531277 5985050 3531670 5893980 9439277. x 10^5171655888
0000000 0000046 3718218 5095045 8438771 4531277 5985050 3531670 5894606 3902528. x 10^5171655888

100 msで計算できるようにしたったわ!

>>675
暗算はスレチ
2022/05/07(土) 01:50:30.88ID:s6tDba0D
つなみに基数変換アルゴリズムにはトーナメント方式というものがあって並列計算に持ち込めるらし
星の数ほどプロセサーが使える場合は有効かもしれん
富岳を使える機会があったらやってみたい
2022/05/07(土) 02:01:09.56ID:i0ZrzBre
>>678 >>679
それだけなら>>657の128倍精度のライブラリで計算外すればすぐでは?
2022/05/07(土) 02:05:54.40ID:s6tDba0D
なにおうヽ(`Д´#)ノ ムキー!
2^17179869183 is between
0000000 0000046 3718218 5095045 8438771 4531277 5985050 3532155 1306497 9818029
1992077 6481128 0740258 3796900 2894268 5133665 8876785 8487588 5591832 7186419
0576212 7656864 8464720 4285493 3923042 9654230 7916817 0776591 7647233 1128072
2760420 2266531 9507091 8968753 5716084 2962215 4728982 6664323 6555234 1274646
4896521 9429451 2975764 8380822 6363423 2746025 0005054 5131536 2217832 5023004
1605005 9971605 5861808 1342288 9537948 8099475 2493069 5439539 2974540 8604555
3827776 8910650 1779698 0664637 7405672 7472854 5855966 0105172 1933481 1967719
5700701 3333182 0937700 3166605 4871435 3734677 0010217 6905552 3397265 0416277
0094988 0613651 2390001 0317736 9989814 4998699 5188652 7509316 0899781 9619323
5715923 0653762 3370836 8150405 6226421 7362228 9333270 6654384 1686901 0642565. x 10^5171655258
0000000 0000046 3718218 5095045 8438771 4531277 5985050 3532155 1306497 9818029
1992077 6481128 0740258 3796900 2894268 5133665 8876785 8487588 5591832 7186419
0576212 7656864 8464720 4285493 3923042 9654230 7916817 0776591 7647233 1128072
2760420 2266531 9507091 8968753 5716084 2962215 4728982 6664323 6555234 1274646
4896521 9429451 2975764 8380822 6363423 2746025 0005054 5131536 2217832 5023004
1605005 9971605 5861808 1342288 9537948 8099475 2493069 5439539 2974540 8604555
3827776 8910650 1779698 0664637 7405672 7472854 5855966 0105172 1933481 1967719
5700701 3333182 0937700 3166605 4871435 3734677 0010217 6905552 3397265 0416277
0094988 0613651 2390001 0317736 9989814 4998699 5188652 7509316 0899781 9619323
5715923 0653762 3370836 8150405 6226421 7362228 9333270 6654384 1687053 4062589. x 10^5171655258
2022/05/07(土) 02:06:56.87ID:i0ZrzBre
>>682
筆算法じゃ全桁計算は無理
2022/05/07(土) 02:12:56.32ID:s6tDba0D
>>683
48年ぐらい待ったらできうる
2022/05/07(土) 02:17:43.49ID:i0ZrzBre
2^17179869183 全桁

https://5.gigafile.nu/0514-n79efacc97fda1fc1ecce0eeb21225ab7
(ギガファイル便 テキストファイル)
2022/05/07(土) 02:20:59.45ID:dujXhAGl
なぜコードでなく計算結果なのか
2022/05/07(土) 03:43:06.05ID:bh3xusof
>>661,664,670,672
すみません。Linuxを想定していました
2022/05/07(土) 04:06:12.29ID:P9LDpr78
>>678
素人なので全部は計算出来ないですが
最後の20桁ならすぐに計算できました
88085753133198737408
2022/05/07(土) 04:20:35.96ID:qg2oNGE7
なんかCRIUとかいうのでできるらしいぞ
2022/05/07(土) 05:41:08.75ID:GCz/eJtw
乗算は量子演算使わないと万年かかる
2022/05/07(土) 07:36:33.84ID:hLdUgsLX
>>685
全桁データだからって正確とはかぎらんのかーい!
2022/05/07(土) 07:40:26.77ID:i0ZrzBre
合ってると思うけど
2通りで計算して同じだったし
2022/05/07(土) 08:15:43.50ID:hLdUgsLX
先頭数十桁と最後の数十桁は合っていそう。
文字数は5171655817で合ってるの?
2022/05/07(土) 08:21:32.36ID:hLdUgsLX
>>637
はウルフラムでの17179869183*Log2/log10の計算結果。
>>656
はpythonで打ったプログラムで出たもの。

桁数はE+5171655945で間違いないと思ったが。
2022/05/07(土) 08:49:15.35ID:i0ZrzBre
2^17179869183

●計算結果
https://5.gigafile.nu/0514-n79efacc97fda1fc1ecce0eeb21225ab7
(5171655946バイト)

※実行時間: 約20分

●コード (C言語)
https://ideone.com/xSaa6x

※メモリが16GBくらい必要です
2022/05/07(土) 09:26:24.51ID:hLdUgsLX
>>693
文字数チェックに使ったGigaTextViewerにバグがあったらしい。
バイト数で5171655946で見たら合ってるな。
バグないみたい。ご苦労様。

あとは128倍精度浮動小数点数の最大値とか計算できると良いな。
相当凄腕なら64倍以上のn倍精度精度浮動小数点数の最大値を0.06秒くらいで出せると良いけどな。
2022/05/07(土) 10:01:38.30ID:i0ZrzBre
(2^((2^(35-1))-1))*(2-(2^-4060))

これの計算なら
>>695のコードを少しいじれば出来るから
やってみな
2022/05/07(土) 10:05:53.71ID:hLdUgsLX
ともかくどうもありがとう。
2022/05/07(土) 10:27:32.54ID:hLdUgsLX
128倍精度付近の計算は5GB程度と分かったが、256倍精度なら80GB程度とかになるのか?
全部のデータを吐くのには無理があるな。
2022/05/07(土) 11:12:27.95ID:hLdUgsLX
次の問題。

65536倍精度浮動小数点数 2^16倍精度 2097152ビット浮動小数点数 (2^((2^(71-1))-1))*(2-(2^-2097080)) 355393490465494856466桁の値 有効桁数631283桁

最大値
(2^((2^(71-1))-1))*(2-(2^-2097080))
8.751158848740476104171068534561420331800200930194140062439011962812174483292686870548794134181772232E+355393490465494856465


これを合っているか確認して戴きたい。
時間かけなくていいからね。簡単にできそうならやってみて。
2022/05/07(土) 11:24:24.96ID:i0ZrzBre
8.75115884874047610417106853456142033180020093019414006243901196281217448329268687054879413418177223250026754484296779541335755918551116311988151294437120403120859156456766214020358536453140920536494153366498563224599112643650005214473466325352790995530944092962954114633561899471578385791449307429666571647389734015518462597415175193161095962388238415165666405164185316844538944891015624600209337136687435968731829027874814729004423100156170455627257657662018544353080611835640032201070594171947167003291711646891546745572991874468255861057996361346972313268224686528372873429102591994402195151868961348300405641520089415930898779525616284304652528475239523093098963439947423678208493232864450286525255133498508464916769066793870894739506167659828704373657304962097164032305167374291543346284808597600898542590310745266381890317624392291438000481495226828900983685105244929525982538100990167556406600838995052292E+355393490465494856465
2022/05/07(土) 11:27:01.76ID:hLdUgsLX
>>701
はやw

合ってるみたいだな。ありがとう。
2022/05/07(土) 11:29:01.32ID:hLdUgsLX
>>701
プログラムできちゃったの?凄いね。
最大何倍精度まで計算できるんだろうか?
2022/05/07(土) 11:29:47.60ID:hLdUgsLX
ウルフラムアルファでも計算できないのにw
2022/05/07(土) 11:30:15.89ID:i0ZrzBre
指数と桁の割り振りは決まってないし
好きに決めれば良いんだよ

IEEE754の範囲でも
倍になるごとに4bit増えてるわけでもない
2022/05/07(土) 11:31:51.28ID:i0ZrzBre
>>703
電卓で計算しただけ
2022/05/07(土) 11:45:08.76ID:hLdUgsLX
>>705
IEEE754-2008では推奨で決まってるよ。
結果的に4bit増になる式が書いてある。

まぁ別に合わせなくてもいいが、合わせて演算パッケージの開発をしやすくした方がいいんじゃないのかな。
桁が足りなければどんどん倍数を増やせばよいわけだし。

ちなみにどんな電卓なら計算できるの?
2022/05/07(土) 12:02:42.85ID:i0ZrzBre
>>707
自作電卓だけど
多くの桁数を計算出来る電卓(計算ソフト)は世の中にたくさんある
2022/05/07(土) 12:08:50.27ID:i0ZrzBre
半精度、単精度はルールかは外れてるし
8倍精度以上をそのままバイナリ形式で他のソフトとやり取りする事もなかなか考えられないし
桁数はいらないけど指数が欲しい時もある
というか、桁数に対して指数の割合が少なすぎる
65536倍精度を使う場面で指数を数ビットケチる意味はまったく無い

ライブラリを作るなら柔軟に設定出来るものが良いかと
半精度は今でも用途によって複数の形式があるし
2022/05/07(土) 12:11:03.63ID:hLdUgsLX
フリーソフトで出してよw
2022/05/07(土) 13:41:52.30ID:5iVnmLs9
boostに自分の作った無限状態マシンのラブラリーを導入して世界中の人に使ってもらいたいけどどうすればいい?
2022/05/07(土) 13:44:14.31ID:hLdUgsLX
2テトレーション6、2^^6、2^2^2^2^2^2の実数の計算はできますか?
2022/05/07(土) 14:01:25.93ID:i0ZrzBre
できません
2022/05/07(土) 14:06:31.86ID:hLdUgsLX
残念です。
2022/05/07(土) 16:05:50.34ID:Cir/Il2y
>>695のコードだと 2^2^35 くらいが限度

工夫すると 2^2^42 くらいまではいける
計算バッファにHDDを8TBほど使う

2^2^65536は...
宇宙中のリソースを使っても無理
上位1000桁や下位1000桁だけなら可能
2022/05/07(土) 19:56:49.06ID:hLdUgsLX
ブラウザpythonでプログラミングしたら10^10^50まではとりあえずエラーが出なかった。
内部でどうやってるんだろう?
717デフォルトの名無しさん
垢版 |
2022/05/07(土) 20:11:08.30ID:ihw8CMAo
(2^2)^35か
2^(2^35)かどっちだ?
C++的には前者だが数学的には後者だな
2022/05/07(土) 20:28:26.23ID:hLdUgsLX
>>717
後者だろ?
俺もそれで組んだ。
2022/05/07(土) 21:33:22.65ID:GCz/eJtw
>>687
/etc/pm/sleep.d
2022/05/08(日) 00:59:03.56ID:fONWhazS
べき乗は右結合というのは宇宙の始まりから決まってゐる
なぜなら、(2^2)^35 = 2^(2*35)であって1重のべきにすぎないから左結合の多重冪は多重である意味が無い
2022/05/08(日) 01:01:37.38ID:fONWhazS
>>717
ここでの演算子^はXORの意味ではないから念のため
722デフォルトの名無しさん
垢版 |
2022/05/08(日) 06:50:42.66ID:RoE3BV2z
2+2+2 = 2*3
2*2*2 = 2^3
2^2^2 = 2↑3
2↑2↑2 = 2↑↑3
723デフォルトの名無しさん
垢版 |
2022/05/08(日) 06:51:37.65ID:RoE3BV2z
途中で送信しちまった
これをtemplateで一般化できるか?
724デフォルトの名無しさん
垢版 |
2022/05/08(日) 07:50:20.51ID:21iaPdPG
ここの定義で実装してみた
https://ja.wikipedia.org/wiki/クヌースの矢印表記#定義

#include <iostream>

template<int level>
struct tower {
template<class T, class U>
constexpr static auto op(T t, U u) {
T ret{1};
for (U i = 0; i < u; i++) ret = tower<level - 1>::op(t, ret);
return ret;
}
};
template<> // pow(t, u);
struct tower<1> {
template<class T, class U>
constexpr static auto op(T t, U u) {
T ret{1};
for (U i = 0; i < u; i++) ret *= t;
return ret;
}
};

int main() {
std::cout << tower<2>::op(uint64_t(3), 3) << std::endl;
}
2022/05/08(日) 08:36:28.64ID:vKAQqA9f
>>722
>2^2^2 = 2↑3

あれ?

>3↑3=3^3(3の3乗)=27です。

とか書いている人もいる。
2022/05/08(日) 08:41:34.72ID:vKAQqA9f
>既に述べた通り、1重のクヌースの矢印は冪乗を表す。また、2重のクヌースの矢印はテトレーションを表す。

{\displaystyle a\uparrow b=a^{b}} a\uparrow b = a^b
{\displaystyle a\uparrow \uparrow b={}^{b}a} a\uparrow\uparrow b = {}^b a

クヌースの矢印の矢印が一個ずつ足りないんじゃない?
2022/05/08(日) 10:21:28.93ID:RTAOPX4V
>>719
それは
> メモリの内容をファイルに丸々ダンプ
したりするための仕組みじゃないだろ
チェックポイントがやりたいんじゃないの
2022/05/08(日) 11:30:55.36ID:vKAQqA9f
>>716
ideoneのpythonなわけだが、
10^10^10^5まで対応していそうだ。
2022/05/08(日) 12:20:02.96ID:sGLUGFq3
>>728
タイムアウトすっぞ
2022/05/08(日) 12:29:28.95ID:ZM5mEHZG
昔C++で少ない文字数で巨大な数を作るってのやったなあ
intは十分大きいとしてint main();の戻り値を競うって感じ
2022/05/08(日) 12:51:18.92ID:riShKp28
>>724
constexpr for
ワロタ
2022/05/08(日) 13:13:57.96ID:sRJ9WYdm
return ~0;で終わりでは?
2022/05/08(日) 13:25:31.24ID:nwquViMM
-1だからあんまり大きくないんじゃね?
2022/05/08(日) 14:25:43.97ID:E3hRzs1K
>>727
??
2022/05/08(日) 14:51:21.54ID:fONWhazS
FFTによる積の多倍長演算完全に理解した!
適当な基数の下で表した例えば4桁の数 (a b c d) と (c d e f) を筆算で計算したとき現れる8個の積和
(例えば最長のやつはaf + be + cd + dc)
というのは、 (a b c d) と (c d e f)をそれぞれ関数波形とみなしたf(n)、g(n)の畳み込み
 h(k) = Σ[k=0..3]f(k)g(3-k) (k=0..7)
に他ならない(f(k)やg(k)の範囲外は0とみなす
ということは、h(k)、f(k)、g(k)それぞれのDFT(この場合は1の8乗根を基底とするやつ)をそれぞれH(k)、F(k)、G(k)として
 H(k) = F(k) * G(k)
となるわけやなのでそうやって求めたH(k)を逆DFTしたらh(k)の値が得られているというしくみ
(このh(k)を基数B内に収まるようにcarry_and_fix()したら最終的な8桁の並びが得られる、
2022/05/08(日) 14:53:42.06ID:fONWhazS
FFTする高速化方法はここ↓見たらワカル(wは1のN乗根なので、w^N = 1とかw^(N/2)=-1とかいうのが式変形の要
https://qiita.com/peria/items/fbdd52768b4659823d88

いまちょっと他の用事で手が離せないので48年以内に累乗根の誤差の影響が無い形で実装してみるわサーセン;;;

そしたら漏れも勝ちや!

何と戦ってるのかは知らんが、
2022/05/08(日) 15:17:10.76ID:fONWhazS
スマン誤記があったorz
畳み込みの式は正しくはこうっす
 h(τ) = Σ[k=0..3]f(k)g(τ-k) (τ=0..7)
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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