3 ポイント 投稿者 GN⁺ 2023-09-28 | 1件のコメント | WhatsAppで共有
  • 2010年にAndreas Lundbladが書いた、もっとも多くコピーされたStackOverflowのスニペットには欠陥がある。
  • このスニペットは、バイト数を人間が読みやすい形式で出力する問題の解決策である。たとえば、123,456,789バイトを"123.5 MB"と表現するものだ。
  • Lundbladの解決策は、ループの代わりに対数を使って適切な接尾辞(kB、MB、GBなど)を計算する。
  • このスニペットは、「GitHubプロジェクトにおけるStack Overflowコードスニペットの使用と帰属表示」という題名の2018年の研究で確認された後、もっとも多くコピーされた。
  • 研究では、ほとんどの人がStack Overflowからコードをコピーする際に適切な帰属表示を含めていないことがわかった。
  • Lundbladのスニペットの欠陥は、バイト数が1 MBに近づいたときに丸め誤差があることだ。たとえば、999,999バイトを入力すると、正しい"1.0 MB"ではなく"1000.0 kB"が結果として返る。
  • Lundbladは、このような問題やほかの極端なケースを処理する修正版コードを提供している。これには、負の入力やdoubleの精度制限が含まれる。
  • この記事から得られる主な教訓は、あらゆる極端なケースをテストすることの重要性、浮動小数点演算の複雑さ、そしてコードをコピーする際に適切な帰属表示が必要であることだ。

1件のコメント

 
GN⁺ 2023-09-28
Hacker News の意見
  • コメントによれば、史上最も多くコピーされた StackOverflow のスニペットには欠陥があるとのことです。
  • コメント投稿者たちは、その欠陥のあるコードは不要なハードコード値と if 文を使っており、二分探索で単純化できると指摘しています。
  • 一部のコメント投稿者は、コード内の 2 回の log() 呼び出し、1 回の pow() 呼び出し、そして ceil() の使用に疑問を呈し、より単純なアプローチのほうが効果的かもしれないと示唆しています。
  • 人間が読みやすい形式でサイズをフォーマットする代替ライブラリとして、Rust や .NET 向けの PrettySize ライブラリのようなものがあります。
  • 一部の開発者は、信頼できないコードを StackOverflow からコピーして自分たちのアプリケーションに貼り付ける行為に懸念を示しています。
  • コード内で浮動小数点の log 演算や整数に適用された除算を使うことは、過度に複雑でバグを招きやすいと批判されています。
  • この議論は、コピーされたスニペットに依存するのではなく、コードの基本原則を理解することの重要性を強調しています。
  • コメントではさらに、StackOverflow のようなコミュニティにおける知識共有のより広い問題や、誤情報が広まる可能性についても振り返られています.