ときどきの雑記帖 RE* (新南口)
見知らぬ国のトリッパー
グフ
アニマックスで先週の日曜深夜(というか月曜0時)から 劇場版三部作を一作ずつ放映していて 今週(9/17深夜)は 機動戦士ガンダムⅡ 哀・戦士編<HDリマスター> | アニマックス だったのだけど、 クライマックスのジャブロー降下作戦のところで ザクバズーカ(?)を持ったグフが出てくるのが なぜか印象に残っている。
このグフとは(たぶん)関係ないけど、 ここで出てくる(たぶん無名兵士の) 「降りられるのかよーっ?!」 ってセリフが好きだ (TV版にはなかった)😄
笑わない数学シーズン2
たまたま観ていた解体キングダムのあとに番組の宣伝があった。 今回も水曜23時からのようだ。
解体キングダムは総合に移ってからはほとんど観ていなかったのだけど 次回はタワークレーンということらしいので これは観ておかねば😄
ところで笑わない数学のシーズン1のDVD出てたんすね。
1+1=2
はやっぱりアレかなあ。
ConvertFrom-String
メモ。 使いどころがありそうでなさそうな機能だけど 「こんなこともあろうかと」 のために(謎)
窓辺の小石(131) テキストの超弦理論 | マイナビニュース
万能ではないが、PowerShellの“ConvertFrom-String”コマンドを使うと、プログラムを作らずにテキストを分解してオブジェクト化することが可能だ。具体的には、
- ConvertFrom-String (Microsoft.PowerShell.Utility) - PowerShell | Microsoft Learn
- PowerShell/テキスト処理/ConvetFrom-String 複数行文字列をコレクションオブジェクトへ変換 - yanor.net/wiki
- ConvertFrom-StringData (Microsoft.PowerShell.Utility) - PowerShell | Microsoft Learn
新刊近刊
【6階自然科学】本日の新刊から、ヨハン・エクレフ『暗闇の効用』(太田出版)を。
— 紀伊國屋書店 新宿本店 (@KinoShinjuku) September 15, 2023
人工的な光の氾濫によって、生物に、我々の体に、そして地球にどんな影響が起こるかを綴る科学エッセイです。谷崎潤一郎『陰翳礼讃』の話も出てきますよ。B08科学一般棚にて hm pic.twitter.com/bRED2nXcwc
暗闇が消えると何が失われるのか? 生物学者が詩的に綴る、感動の科学エッセイ。
2022年度 英ウォーターストーンズ ポピュラーサイエンス部門ベスト・ブック獲得
へー、面白そう。
乱数
10月上旬新刊予定
— 書泉_MATH (@rikoushonotana) September 17, 2023
『乱数』伏見正則(ちくま学芸文庫)
乱数作成の歴史は試行錯誤、悪戦苦闘の歴史でもあった。基礎的理論から実用的な計算法までを記述した「乱数」を体系的に学べる日本で唯一の教科書。
文庫で、というのが珍しい気がするけど 内容的には興味をひかれる。
そう言えば乱数生成の手法について 流行というか定番が以前のそれとは変わっている (メルセンヌツイスターの代わりに××ボックス=ミュラーの代わりに△△といった) というツイート(ポスト)をちょっと前に見かけたんだけど どんなんだったけか
あったこれだ。
数値解法の資料をまとめていて、随分世の中が変わっていることに気がつきました。頑張って追いついておかないと...
— SZ (@seiji_zenitani) September 3, 2023
・乱数:メルセンヌ・ツイスター (1998) → PCG (2014)
・正規乱数:Box-Muller (1958) → ziggurat (2000)
・ガンマ乱数:??? → Marsaglia-Tsang (2000)
- PCG, A Family of Better Random Number Generators | PCG, A Better Random Number Generator
- Permuted congruential generator - Wikipedia
- PCG という乱数 - Qiita
- 10年前の自分に伝えたい、たった一つの擬似乱数生成器 - Qiita
- Ziggurat algorithm - Wikipedia
- The Ziggurat Random Normal Generator » Cleve’s Corner: Cleve Moler on Mathematics and Computing - MATLAB & Simulink
- Ziggurat-based hardware Gaussian random number generator | IEEE Conference Publication | IEEE Xplore
- A simple method for generating gamma variables | ACM Transactions on Mathematical Software
- A simple method for generating gamma variables - 358407.358414.pdf
圏論
11月上旬新刊予定
— 書泉_MATH (@rikoushonotana) September 19, 2023
『万物の理論としての圏論』丸山善宏/著 2420円(青土社)…
なんのかんので圏論を扱った本も出続けてますね。
awk
One True awkのバージョンアップに関する記事に対する反応で
[B! awk] awkが新しくなる!? 本家AwkがUnicode (UTF-8)とCSV対応に! - Qiita
“One True Awk” ってなんだよ
この件について、斉藤博文さんの解説を読みたい。
まあ経緯を知らんとそういう感想を持つのかもなあ>「“One True Awk” ってなんだよ」
元記事で自作のスクリプトが動かなくなった云々という話は こういう方向で一応対処はされるようで。
UTF-8以外のマルチバイトエンコーディングは? という気もするけど、それをやるのは大変だしねえ…
v7 awk
前回、UNIX V7のawk(要するにnawkになる前のawk)では FSに指定できるのは正規表現ではなく 文字一文字だけという話を書いたけど、 実際のところどうなのかが気になったので コードを見てみると
v7unix/v7/usr/src/cmd/awk/lib.c at a19130f05356581fe12d635a4cce4d8556a33171 · v7unix/v7unix
fldbld()
{
register char *r, *fr, sep;
int i, j;
r = record;
fr = fields;
if ((sep = **FS) == ' ')
for (i = 0; ; ) {
while (*r == ' ' || *r == '\t' || *r == '\n')
r++;
if (*r == 0)
break;
i++;
if (i >= MAXFLD)
error(FATAL, "record `%.20s...' has too many fields", record);
if (!(fldtab[i].tval&FLD))
xfree(fldtab[i].sval);
fldtab[i].sval = fr;
fldtab[i].tval = FLD | STR;
do
*fr++ = *r++;
while (*r != ' ' && *r != '\t' && *r != '\n' && *r != '\0');
*fr++ = 0;
}
else
for (i = 0; ; ) {
i++;
if (i >= MAXFLD)
error(FATAL, "record `%.20s...' has too many fields", record);
if (!(fldtab[i].tval&FLD))
xfree(fldtab[i].sval);
fldtab[i].sval = fr;
fldtab[i].tval = FLD | STR;
while (*r != sep && *r != '\n' && *r != '\0') /* \n always a separator */
*fr++ = *r++;
*fr++ = '\0';
if (*r == 0) break;
r++;
}
*fr = 0;
for (j=maxfld; j>i; j--) { /* clean out junk from previous record */
if (!(fldtab[j].tval&FLD))
xfree(fldtab[j].sval);
fldtab[j].tval = STR | FLD;
fldtab[j].sval = NULL;
}
maxfld = i;
donefld = 1;
for(i=1; i<=maxfld; i++)
if(isnumber(fldtab[i].sval))
{ fldtab[i].fval = atof(fldtab[i].sval);
fldtab[i].tval |= NUM;
}
setfval(lookup("NF", symtab), (awkfloat) maxfld);
if (dbg)
for (i = 0; i <= maxfld; i++)
printf("field %d: |%s|\n", i, fldtab[i].sval);
}
なるほど確かに正規表現での分割はしていない。 そして
if ((sep = **FS) == ' ')
for (i = 0; ; ) {
while (*r == ' ' || *r == '\t' || *r == '\n')
r++;
FSがスペース一個のときの動作はこのときからすでに 今のもの(というかnawkのそれ)と同じだったと。
FORTRAN Compiler on IBM 704
ふと気になったのだけど、 算術式の構文解析のところで 対象が整数型だったら実数型では行わない処理をするという
MS300 PXD ,0 * CLEAR 4F13642 -1
TRBLKB BSS 0 BASE ADDRESS FOR TAGGED TRANSFER. 4F13643 0
LGL 6 GET FIRST CHAR OF SYMBOL. 4F13644
TSX TESTFX+1,1 TEST FOR FIXED OR FLOATING POINT. 4F13645
TRA LATXL FLOATING, GO PERFORM LEVEL ANALYSIS. 4F13646
*
*fixed point variable
CAL EIFNO FIXED, PREPARE FORVAR ENTRY. 4F13647
ANA MASK1 X 4F13648
SLW G X 4F13649
TSX TET00,1 MAKE FORVAR ENTRY. 4F13650
5 X 4F13651
PXD ,0 4F13652
LDQ LEFT+2 4F13653
LGL 12 4F13654
SUB CALLER 4F13655
TNZ LATXL 4F13656
TSX TET00,1 4F13657
6 4F13658
TRA LATXL GO PERFORM LEVEL ANALYSIS. 4F13659
これとか
* '='
MS310 *** MSERR=,0 TXH FOR LEFT, TXL FOR RIGHT OF EQUAL SIGN. 4F13676 TXH/TXL
STZ CHSAVE CLEAR 4F13677
PXD ,0 CLEAR AC 4F136775
LGL 6 GET FIRST CHAR OF SYMBOL. 4F13678
TSX TESTFX+1,1 TEST FOR FIXED OR FLOATING POINT 4F13679
TRA MS322 FLOATING, 4F13680
CAL EIFNO FIXED, PREPARE FORVAL ENTRY. 4F13681
ANA MASK1 X 4F13682
SLW G X 4F13683
TSX TET00,1 MAKE FORVAL ENTRY. 4F13684
6 X 4F13685
TRA MS322 4F13686
*
これ。
古のFORTRANは定数も変数と同じようにあるメモリ番地に割り当てられていた とかいう話(正確なところはよくわからん曖昧な記憶)と関係あるんだろうか? とすると、実数(floating point)の定数はどうコンパイルされていたんだろう?
ところで以前にも触れたことがあったと思うけど TESTFXはこんなサブルーチン。 上で引用したコードでTESTFX+1を呼び出しているのは アキュムレーターに入っている文字を 使わせるため。
REM TESTFX,1/ CALLERS=SS000,C3000,IFFIX. 4F11323
REM TESTFX TEST FOR FIXED OR FLOATING POINT VARIABLES. 4F11324
TESTFX CAL FIRSTC COMPARE FIRST CHARACTER 4F11325
CAS L(H) WITH H. 4F11326
CAS L(O) IF GREATER THEN H, COMPARE WITH O. 4F11327
TRA 1,1 * IF NOT GREATER THEN H, LESS THEN O,4F11328
TRA 1,1 * THEN TAKE FLOATING POINT EXIT. 4F11329
TRA 2,1 * OTHERWISE, TAKE FIXED POINT EXIT. 4F11330
REM END OF PROGRAM TESTFX. 4F11331
一文字目がI
からN
の間のものだったら
整数型(fixed point)というおなじみのアレ。
(full|harf) adder
基本情報の学習範囲に、
— エクセルの神髄 (@yamaoka_ss) September 14, 2023
「半加算器」「全加算器」は必要だと思いますか?
等差数列の和の公式
なんか一部で盛り上がっていたらしいこの話題
僕は左みたいなコードをよく書きます。
— 麹町jp ₍ᐡ• •ᐡ₎ 🧩こうじまち (@KSJP9) September 15, 2023
エンジニアさんに見せたら「プログラミングではそんなことしないんですよ」と言って右のループの書き方へ変えます。確かに計算はCPUにさせるところがプログラミングっぽい。
右の方を好む人が多いでしょうか? pic.twitter.com/1NztJia7VU
これ自体はどうでもいい(特に言うことはない(前提条件がなさすぎ))のだけど
エエッ! n 以下の和を、これ以外の書き方する勢力が存在するのですか!?
— ながたかな(YouTube にお歌あります) (@ngtkana) September 15, 2023
fn sum(n: u64) -> u64 {
((n + 1) >> 1) * (n | 1)
}https://t.co/hZRZshVBDS
なぜこれで計算できるのかしばらく考えてしまった😓
自分は駆け出しエンジニアですが、世間一般のエンジニアさんはこの手の処理はMonoidとFoldableを組み合わせて対応するとスクールで習いました! https://t.co/Cy59aseKBA
— かにかま🦀 (@ka2_kamaboko) September 15, 2023
😄
((n+(n&1))>>1)*(n+1-(n&1))
— uniabis (@uniabis) September 15, 2023
これが速くなりそうなCPUには掛け算命令が存在するか怪しい https://t.co/r88PJaFh4T
これ、最初の+(n&1)
ってすぐあとの>>1
で消されてしまうような?
追記
勘違いしていた。
‘|’(bitwise or)ではなく
‘+’(算術加算)なので、
nが奇数、たとえば9
だった場合
(9 + (9 & 1)) >> 1
となりこれは1足すことにより繰り上がりが起きて
10 >> 1
となって、その結果は5になる。
一方乗算の右辺は
9 + 1 - (9 & 1)
で9
。
乗算全体は5*9
となって
最終的な答えは45
となる。
nが偶数、たとえば10
だったとすると
((10 + (10 & 1)) >> 1) * (10 + 1 - (10 & 1))
→
(10 >> 1) * (11 - 0)
→
5 * 11
→
55
今日の遠い目(その1)
社内で「力がほしいか?」って聞かれて、「はい..」って答えたらAdmin権限渡されてサーバー引き継ぎされたことある
— 🆉🅰🆃 (@zat_is_a_cat) September 17, 2023
ARMSのアニメ、911の頃でしたよねえ (で、ラスト付近の展開が原作とかなり変わった)。
今日の遠い目(その2)
アニメ「School Days」最終話(第12話)の最速放送において「Nice boat.」が放送されて今日で16年となります(2007年9月18日深夜/9月19日未明放送)、「School Days」の放送は「らき☆すた」と同じ時期(2007年4月-9月放送)でもあるため、当時の衝撃を知らないアニメファンも次第に増えていると思われます pic.twitter.com/w2RBqHT29g
— マウス (@mouseunit) September 18, 2023