海外のプログラマーあるあるネタで「浮動小数点誤差」って知ってた?アメリカ在住の飼い主が愛猫の薬のラベルを見たら、体重が1兆分の1ポンド単位という謎の精度で印字されてたんだと。人間なら体重計の誤差レベルの話が、システムのバグでとんでもない桁数になるっていう、ペット×プログラミングのちょっとした事故現場が海外掲示板で話題になってたから紹介するで。
重みを浮動小数点で保存したときあるある
原文を見る
When you store your weights in floating point
✍️ 管理人: エンジニアなら一度は踏む地雷やつやな。0.1とか13.86みたいな小数って、コンピュータの中では2進数で近似値としてしか表現できひんから、こういう誤差がにょきっと生えてくるんよ。日本のシステムでもレシートの合計金額がちょっとズレるとか、似たような話は昔からあるあるで。個人的には「なんでそのままDBに突っ込んだ…」って毎回思うけど、動物病院の会計システムなら尚更チェックしといてほしいところやな。
一般人が使える中で一番精密な体重計、実は近所の動物病院にあるんだよね。
原文を見る
The most precise scale available to regular consumers and it's at your local vet
✍️ 管理人: これマジで納得なんよな。動物病院の体重計は数百グラム単位の子猫や小動物も測るから、家庭用より段違いに高精度なんよ。日本でも「猫を病院で測ったら家のより正確だった」って話はSNSでよく見るわ。ちなみに獣医の投薬量計算はグラム単位のズレが薬効に直結するから、精密さがガチで必要な業界なんよな。
13.86ってのは、単なる手抜きプログラミングだよ😄
原文を見る
it's 13.86 and lazy programming 😄
✍️ 管理人: ぐう正論で草。四捨五入の処理をサボって生の浮動小数点値をそのまま表示に流すと、こういう「見せちゃいけない小数点以下の桁」がダダ漏れになるんよな。日本のアプリでもたまに謎の桁数が表示されるバグ見るけど、大体これと同じ原因やと思う。個人的にはこういう「実装の裏側が見えちゃう」バグ、ちょっと愛嬌あって嫌いじゃないわ。
なんで説明書に「薬を飲ませる前に、彼を冷蔵庫で冷やしてよく振ってください」って書いてあるんだ?
原文を見る
Why does it instruct you to refrigerate and shake him well before giving him his medicine?
✍️ 管理人: これ多分「薬を」冷蔵庫で冷やして振ってって意味やと思うけど、英語の文法的に猫本体を冷やすみたいに読めてしまうっていうネタコメントやな。液体タイプの猫用薬は成分が沈殿しやすいから振る指示自体はよくあるし、保存に冷蔵が必要な抗生物質なんかも普通にあるんよ。日本の処方薬でも「よく振ってから」ってシロップ薬の注意書き、見たことある人多いんちゃう?
精度は大事。0.000000000001ポンドの差が、何も起きずに済むか、ニャンゴジラが爆誕するかの分かれ目になるかもしれない。
原文を見る
Precision matters. A .000000000001 lb difference could make the difference between nothing happening and Catzilla.
✍️ 管理人: 急にスケールがデカくなって草。海外Redditだとこういう「大袈裟な誇張ネタ」がよく伸びる定番の笑い方なんよな。ちなみにゴジラは英語圏でも普通に「Godzilla」で通じるくらい知名度あるから、こういう比喩ネタがすんなり刺さるんやと思う。個人的にはこの発想力、単純に好きやわ。
浮動小数点の誤差です。13.86は浮動小数点数では正確に表現できないため、表現可能な最も近い数値に丸められました。
原文を見る
It's a floating point error. 13.86 cannot be represented exactly with floating point numbers, so it was rounded to the closest representable number.
✍️ 管理人: ガチ解説サンクスな。これはIEEE 754っていう浮動小数点の国際規格が原因で、10進数の小数を2進数で完璧に表現できないケースが結構あるんよ。プログラミング学び始めの人が「0.1 + 0.2が0.3にならない」って驚くやつも同じ原理やな。日本のプログラミング入門書でも定番の「あるある事故」として紹介されとるで。
正確には、10兆分の1ポンド単位までね。
原文を見る
Actually down to the ten-trillionth of a pound.
✍️ 管理人: 最後にきっちり数字を訂正してくるの、Reddit民の生真面目さが出ててオチとして完璧やわ。1兆分の1じゃなくて10兆分の1やから、実際はさらに桁が一つ多いってことやな。日本円換算すると猫の体重1ポンド=約453gやから、その1000万分の1グラム単位までラベルに載っとる計算になる。もはや誰得情報の極みやけど、こういう細かい訂正コメントが伸びるのもReddit文化っぽくて好きやわ。
💭 管理人の感想
今回のスレ、要するに獣医の投薬システムが猫の体重をそのままプログラムに突っ込んだ結果、浮動小数点誤差で謎の桁数が印字されてもうたっていう、プログラマーあるあるとペットあるあるが合体したネタやったな。日本でもレシートやポイント計算でこの手の誤差バグはたまに見かけるけど、それが「猫の体重」っていう身近な数字で可視化されると急に面白さが増すんよな。0.1+0.2が0.30000000000000004になる現象、名前は知らんくても実は日常のあらゆるシステムに潜んどるんやで。動物病院の体重計が家庭用より精密っていう指摘も地味に勉強になったわ、確かに子猫サイズだと数十グラムの誤差が命取りになることもあるからな。こういう「システムのバグが偶然かわいい形で表に出る」現象、前に電卓アプリで似たような誤差ネタが海外バズってたのも思い出したわ。みんなの家のペットの薬、明細書とかレシートに変な数字紛れ込んでたことないか?よかったらコメントで教えてくれ。
📖 この記事のチャンク〜英語フレーズを覚えよう〜
“make the difference between”
🔊 読み方: メイク・ザ・ディファレンス・ビトゥイーン
🇯🇵 意味: 〜と〜を分ける決定的な要因になる、勝敗や成否の分かれ目になる
💡 二つの結果(成功と失敗、良い状態と悪い状態など)を分ける決定的な要因について話すときに使う。例:『That extra 30 minutes of prep could make the difference between nailing the interview and blowing it.(その30分の準備が面接の成否を分けるかもしれない)』
🌍 他の言語では?
🇩🇪 ドイツ語: den Unterschied ausmachen (デン・ウンターシート・アオスマッヘン)
→ ドイツ語で最も自然な言い方で、『それが決め手になる』というニュアンスを持つ日常会話フレーズ。
🇫🇷 フランス語: faire toute la différence (フェール・トゥット・ラ・ディフェランス)
→ フランス語で非常によく使われる表現で、些細に見える要素が結果を左右することを強調する際に使う。
🇰🇷 韓国語: 한 끗 차이로 갈리다 (ハン・クッ・チャイロ・カルリダ)
→ 直訳ではなく韓国語ネイティブが好んで使う慣用表現で、『紙一重の差で結果が分かれる』というニュアンスを持つ。
🇪🇸 スペイン語: marcar la diferencia entre (マルカール・ラ・ディフェレンシア・エントレ)
→ スペイン語で日常的に使われる表現で、小さな要素が結果を大きく左右するという文脈で頻繁に使われる。
※翻訳は意訳を含みます。正確な表現は原文リンクからご確認ください。
※引用元: r/mildlyinteresting


コメント