昨日発生していたサイトログインできない不具合は修正されております(詳細はこちら)

浮動点小数について

3
yappy @yappy_t

@nagoya313 @mondatto だからあれほど浮動小数点には気をつけろと… プログラミング講座で言ったぞ(きr

2011-06-08 00:28:52
yappy @yappy_t

しかし今まで受けた授業の中で浮動小数点数の表現や誤差について言われたの基礎の数学(般教)しかない。プログラムコードは扱ってないし。 結構重要だしプログラミングの標準課程(授業でも書籍でも)に入れてほしいと思うんだがなあ。

2011-06-08 00:41:45
yappy @yappy_t

@ora_dll 両者勝手にやってるから仕方ないね。一応規格準拠性が高い気がした。買ってないので気がしただけ。

2011-06-08 00:52:18
隅須正昭 @nagoya313

浮動小数点で最初につまるとこって言ったら普通は等値比較なんではい。

2011-06-08 01:18:36
隅須正昭 @nagoya313

@yappy_t @mondatto 両者ともプログラミング講座に出てなかった件。今年はそのうち触れるはず・・・?

2011-06-08 01:20:12
隅須正昭 @nagoya313

@yappy_t @ora_dll 確かあの本は地味に規格準拠性を売りにしていたはず

2011-06-08 01:27:14
yappy @yappy_t

リテラルの時点で既に丸め誤差があることとか(2進数だと0.1が無限小数になるとか)、ほとんど同じ数値の減算での有効数字減少とか、大きな数値と小さな数値の加算で小さな数値の情報が失われるとか…

2011-06-08 01:32:49
yappy @yappy_t

だめだなんかここの用語覚えられない 丸め誤差・桁落ち・情報落ち さっきのやつは典型的な情報落ちやな…

2011-06-08 01:33:51
隅須正昭 @nagoya313

@yappy_t ゲーム関連では今までそれで困ったことがないが、触れとくべきなんですかね。

2011-06-08 01:36:30
yappy @yappy_t

@nagoya313 浮動小数点数は怖いで… どこまで必要かはセガの黒い本に書いてあることくらいまでが目安かも そういう使い方には最適やねあの本

2011-06-08 01:38:13
yappy @yappy_t

float系統は有効数字に相当する仮数部と指数部(あと符号)で表現されていることを知って各種問題は10進数で考えれば一応のところ耐える これが桁落ちや情報落ちの用語が覚えられない原因だな…

2011-06-08 01:40:49
yappy @yappy_t

誤差の問題って気づきにくいんよ… 表示させても上の2~3ケタだけ合っててあと全く的外れな数字がそれっぽく連なってるってことになるからな…

2011-06-08 01:43:28
yappy @yappy_t

@mondatto カウンタにdoubleとかほぼ人間性と教育者を疑われるレベルなのでやめれ 後者ド安定

2011-06-08 01:47:33
yappy @yappy_t

まずは0.1って書いたリテラルですら誤差つきの値であるという全部誤差つき認識みたいなもんを持ち、あとは誤差の蓄積の概念を得ることだな ある誤差つきの値をループで1000回足したら誤差1000倍みたいな 一応理工学の実験でやってることになってるはずなんだがな…

2011-06-08 01:51:24
ヌルスタック底辺 もにょ~ん @_monyone

@yappy_t 演習担当の教師は、「メンテナンス性を重視した方がいい、ここはdoubleのカウンターを使った方が見やすいし分かりやすいよね」と言っていた…。まあ、自分は黙って後者にしたのですが。

2011-06-08 01:52:37
隅須正昭 @nagoya313

@Kuraot <=2.0は浮動小数点だと誤差って(2.0よりちょっとでも大きくなるとアウト)=の部分が高確率で残当するってのとprintfでdouble出力は%fが正解だがあまりにも間違いが多いので%lfもOKになったって経緯があったりします。

2011-06-08 01:55:10
隅須正昭 @nagoya313

@mondatto @yappy_t あと「バグりやすいよね」って言ってれば完璧!

2011-06-08 01:56:23
yappy @yappy_t

@Kuraot 0.1は1/10です。(1/2)*(1/5)です。0.2は1/5です。2進数で1/5とか10進数で1/7みたいなもんだという認識を持てば簡単です。

2011-06-08 01:56:46
けー@お絵描き🍍 @Kuraot

@yappy_t 出所は両方1/5ってことですか。なるほど。

2011-06-08 02:24:56
けー@お絵描き🍍 @Kuraot

@nagoya313 %lfと%fはよく分かってません。それと誤差が実際より大きいもしくは小さいというのは規則はあるんですかね?

2011-06-08 02:27:33
yappy @yappy_t

@Kuraot printfの可変長引数部分"..."にfloatを渡すと勝手にdoubleにされます。よってfloatもdoubleも%fでした。しかし、scanfではdoubleは%lfであまりにもみんな間違えるためC99で%lfでもいいことになったのです…。

2011-06-08 02:42:16
yappy @yappy_t

今ではprintfで%lfを見ると分かってねーなこいつと思われ、それは誤りだと指摘するとC99だと正しいとか本当にどうでもいい話になってしまいました。 Cの本質は標準ライブラリの仕様じゃねーっつーの

2011-06-08 02:44:35
yappy @yappy_t

@mondatto 大正解。その感覚がないと始まらない。

2011-06-08 02:48:14
は゛と @mr_bato

駄目なのか・・・?@yappy_t 今ではprintfで%lfを見ると分かってねーなこいつと思われ、それは誤りだと指摘するとC99だと正しいとか本当にどうでもいい話になってしまいました。 Cの本質は標準ライブラリの仕様じゃねーっつーの

2011-06-08 02:50:52
yappy @yappy_t

@mr_bato 保身のためにはprintfでは%fを使い、scanfでは%fと%lfを使うのがいいよ。scanfはミスると壊れるけどな…。Y研究室に入ってY教授に聞いてみよう!

2011-06-08 02:52:59