ときどきの雑記帖 RE* (新南口)
無限軌道SSX
エレベーターの輸送能力
あるとき、エレベーターの「定員」ってどういう基準で 決められているのか気になった。 というのも、どう考えてもその人数を詰め込むのは無理だろう という「定員」をよく見かけるので どう決まって(決めて)いるのかなあと。
エレベーターの定員はどのように計算されるのですか?
カゴの床面積から積載量が定められています。 乗用・人荷用エレベーターでは、1人65kgとして定員を定めます。
定員/積載荷重 | 出入口幅 | かご内法 | 昇降路内法 |
---|---|---|---|
24人/1600Kg | 1100 | 2150×1600 | 2750×2450 |
定員/積載荷重 | 出入口幅 | かご内法 | 昇降路内法 |
---|---|---|---|
2000×1750 | 2900×2400 |
2.1m×1.6メートルのなかに24人押し込めるのは相当つらそうな気も。
鉄道の駅でよく見かける3~4人乗れば結構きつい タイプのエレベーターでも「定員」を見ると 10人とかだったりするんだよねえ。謎
GNU
夏休みのお供
NANDだけで作った16bit CPU NLP-16Aのエラッタ修正済み全回路図を配布開始しました。
— ちぇりーたくあん🌸 (@cherry_takuan) August 2, 2024
全144ページ(同じ回路の繰り返し部分も含む)
夏休みのお供にどうぞ。#only7400https://t.co/s9tlTHKU0L
C104
前にも書いたと思うけど 今度のコミケ(C104)も行ける状態ではなく…
Octalのほそ道
C104 Forth本脱稿、印刷発注しました。
— Norihiro Kumagai (C104 8/12月東X-32a Forth本3巻新刊予定) (@tendai22plus) August 1, 2024
「Octalのほそ道3 『雌伏編』」出ますよー。 pic.twitter.com/OLlhAI41j6
ああっこんな本が。 以前1巻をとある方の協力で入手できたのだけど…
って2巻はいつ出た?
で検索してみると
C103新刊出ます。「Octalのほそ道2『野望編』」です。今回はForth処理系の実装がメイン、辞書エントリ変換や辞書ダンプリストなどの開発環境やシングルステップ、ワードリストトレースのデバッグ環境と盛りだくさんの1冊です。 pic.twitter.com/DWzqneuxSk
— Norihiro Kumagai (C104 8/12月東X-32a Forth本3巻新刊予定) (@tendai22plus) December 24, 2023
C103「Octalのほそ道2【野望編】」で参戦します。12/31日曜東へ-12aでお待ちしています。
— Norihiro Kumagai (C104 8/12月東X-32a Forth本3巻新刊予定) (@tendai22plus) December 15, 2023
C102「Octalのほそ道」の続編で、Forth処理系の実装を進めています。 pic.twitter.com/91Tkb7nqfn
前回の冬コミでしたか。 気がつかなかった。
ところで 2巻が野望編 3巻が雌伏編 てのは銀河英雄伝説からですかね (現在は1巻にも黎明編とつくけど最初はなかった)
ということは10巻まで行くんだろうか😄
漢字周期表湯飲み
コミケで出す「お寿司屋さん風・漢字周期表湯飲み」です 前試作したのを再製作しました 水素からローレンシウムまで、金属元素は金へん、気体元素は気がまえなどついつい眺めてしまう一品 文字もエンボス加工で高級感ありです 研究室などで是非お使いください! pic.twitter.com/eKubsKvBhs
— dydt=C104月曜西さ32a (@dydt_Nao) August 6, 2024
あ、これも欲しい😓
今日の重箱の隅
そういう疑問を持つのは良いことだと思うけど
結論
- else や else if を使うときには波括弧がないと動作しない
- if 文をネストする時には波括弧がないと動作しない
なぜそんな結論に😓
Ariane 5
TTSで流し聞き。
— 渡来🐦夢吉 (@try_ymk) August 1, 2024
「64ビット浮動小数点から16ビット整数に変換する際にオーバーフローで、ロケット打ち上げ失敗」
怖すぎる、ソフトウェア設計 https://t.co/5hT3Y2pPVL
そもそもdoubleをint16_tにキャストするとか、何を考えてるのがな。
— めぐみさん (@XayZzVKyS1PGZnQ) August 1, 2024
そんな単純な話だったかなあ と疑問を持ったので(ry
- アリアン5 - Wikipedia
- 欧州アリアン5の打ち上げは、失敗から始まった - takumi296’s diary
- 失敗事例 > アリアン5型ロケットが制御不能で40秒後に爆発
- アリアン5の爆発事故とソフトウェア安全性に関する国際規格
- 「5億ドル?!を吹っ飛ばした、たった1つのバグ!」について調べた - 勘と経験と読経
- オーバーフローが引き起こした面白いバグの話|Rui Ueyama
どうも「オーバーフロー」以外の情報がほとんど見つからないので 難儀したのだけど、 ZERO BUGS シリコンバレープログラマの教え という本に問題のソースコード(の一部)が載っているらしい という情報を得て、運よくその本を持っていたので調べてみた
で、次のようなコードであったらしい (たぶんAda)
L_M_BV_32 := TBD.T_ENTER_32S ((1.0/C_M_LSB_BV) * G_M_INFO_DERIVE(T_ALG.E_BV));
if L_M_BV_32 > 32767 then
P_M_DERIVE(T_ALG.E_BV) := 16#7FFF#;
elsif LM_BV_32 < -32768
P_M_DERIVE(T_ALG.E_BV) := 16#8000#;
else
P_M_DERIVE(T_ALG.E_BV) :=
UC_16S_EN_16NS(TDB.T_ENTIER_16S(L_M_BV_32));
end if;
P_M_DERIVE(T_ALG.E_BH) :=
UC_16S_EN_16NS (TDB.T_ENTIER_16S ((1.0/C_M_LSB_BH) * G_M_INFO_DERIVE(T_ALG.E_BH)));
TDB は TBDの間違いじゃないかという気もするけどそれはさておき
P_M_DERIVE(T_ALG.E_BV)
(垂直成分)に設定する値は16ビット整数の範囲に納まるかどうかをチェックしているのに
P_M_DERIVE(T_ALG.E_BH)
(水平成分)に設定する値はそのチェックがない。
そしてまさにそのチェックしていない水平成分の計算でオーバーフローが起き、
そこから例外が発生して…で爆発に至ったということらしい。
垂直成分の計算の
L_M_BV_32 := TBD.T_ENTER_32S ((1.0/C_M_LSB_BV) * G_M_INFO_DERIVE(T_ALG.E_BV));
は一度32ビット長の整数変数で受けておいて
それで16ビットの範囲に納まるかをチェックし、
納まらなかったら最大値(最小値)を入れるという手順で行っているのに対し。
水平成分では
UC_16S_EN_16NS (TDB.T_ENTIER_16S ((1.0/C_M_LSB_BH) = G_M_INFO_DERIVE(T_ALG.E_BH)));
といきなり設定してしまっている。
そしてこれは、単純に水平成分でオーバーフローのチェックをし忘れた という話でもないらしい
コードに出てくる名前で検索すると もう少し詳しい情報が見つかった(日本語以外で、だけど)
- ProgramAnalysis/summaries/stories/ariane5.md at master · ICTeam28/ProgramAnalysis
- The Worst Computer Bugs in History: The Ariane 5 Disaster | BugSnag Blog
- ariane5-benari.pdf
- Ariane flight V88 - Wikipedia
- The Ariane 5 Failure
- The Ariane 5 software failure - 251880.251992.pdf
- What caused the first Ariane 5 crash? - Quora
https://earth.informatik.uni-freiburg.de/uploads/es-2122/02_specification.pdf のp13にある説明によると、
What happened?
- calibration code from IRS alignment functionality
- not needed during flight
BUT
- overflow exception forced both primary and backup IRS into safe mode ↠ diagnostic data interpreted as flight data
- overflow check on horizontal axis was removed in Ariane 4:
- since Ariane 4 could never achieve high enough values to cause overflow
- check removed to free additional resources on the on-board computer for dependability reasons
Code was re-used from that in Ariane 4 launchers As Ariane 4 was smaller, overflow was never reached Computation that resulted in overflow was not used in Ariane 5 system, calculations were instead taken over by ground-based system
諸々まとめると
- 問題のコードはAriane 4で実績のあったものをそのまま使った
- 実は最初は水平成分の計算でも垂直成分と同じようにオーバーフローのチェックをしていたがそれは途中で削除された
- Ariane 4ではそれで問題なかった(オーバーフローは起きない)
- Ariane 5では条件が変わってオーバーフローが起きてしまった
- さらにオーバーフローにより発生した例外の処理がまずかった
ということのようなので、 「64ビット浮動小数点数の値を16ビット整数に変換しようとしてドジ踏んだ」 と片付けては(矮小化しては)いかん話ではないですかね。
計算で求めた浮動小数点数値を(範囲の狭い)整数値にするというのは ハード絡みのプログラムなら珍しいことでもないし。
新刊近刊
プログラミング〈新〉作法
【📔9月近刊情報📢】
— 講談社サイエンティフィク🖋️📔 (@kspub_kodansha) August 1, 2024
荒木雅弘『プログラミング〈新〉作法 これからプログラムを書く人のために』https://t.co/yb25IuwfBAhttps://t.co/9XOQTZc0nx
「プロとしてプログラムが書ける人」に求められる能力が大きく変わった‼️現代のプログラミング言語を支える技術が凝縮した一冊💪めざせ!新定番😄 pic.twitter.com/RoX8pl33dw
マネとかパクリとか言うつもりはないけど タイトルがちょっと気になるかな😓
awk
FORTRAN Compiler on IBM 704
Hugo メモ
名前
そういえばトルコって実は2年ほど前に英語表記がTurkey「ターキー」からTürkiye「トルキーヤ」に変更されたんですよね。今後はそう呼んでくれると嬉しいとトルコの友人が申しておりました。ホラントはネザーランドに、グルジアはジョージアに、キエフはキーヴに。意外と地名もアップデートが必要。
— シネマ座 (@TKH3D) August 1, 2024
オーストリアもなんかそういう話なかったっけ?
晩酌
晩酌するサメ、晩シャーク pic.twitter.com/aarYkpPWPw
— こやで (@koyadeko) August 2, 2024
光化学スモッグ
こんなふうにして掲示されているの、生まれて初めて見ました。高度成長みある。 pic.twitter.com/MSf2vfiVJJ
— にしい (@Nishii_dec9) August 4, 2024
懐かしい。 とは言え「光化学スモッグ」というと、 学校とかお役所なんかのスピーカーから流された 「光化学スモッグ注意報が発令されました(以下略)」 の音声の方が記憶に残ってるかなあ。 「警報」もあったような気もするけど はっきりした記憶はない
これは横浜市のデータだけど
東京都もあった 【別図】 光化学スモッグ注意報発令日数と健康被害者数の推移