けものフレンズBBS NEO

学生フレンズ集まれ!~ジャパリ学園~ / 1852

1852
クモハ223-2046 2018/04/01 (日) 17:09:01 修正 >> 1845

ワイトはCの事しか知らんから全然分からん!
調べたらdecimal型は内部で10進数で値を保持してるようですね
この誤差は2進数で小数を上手く表せない事に起因しているので確かに10進数で扱えばこの問題は起きませんね
(10進数で保持なんてどうやってやってるんだろ...)

不思議なのがCでもfloatにしたら誤差がなくなるんですよね...

if (0.1 + 0.2 == 0.3){
   printf("合ってる\n");
}else{
  printf("違う\n");
}
if ((float)0.1 + (float)0.2 == (float)0.3){
   printf("合ってる\n");
}else{
   printf("違う\n");
}
//実行結果:
//違う
//合ってる

これの理由がイマイチ分からない...
この誤差は自分の環境で5.5×10-15程度なのでfloatでも普通に入る気がするんですが...

通報 ...