Upgrade to Pro — share decks privately, control downloads, hide ads and more …

浮動小数点数の話

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers. →
Avatar for kato dayo kato dayo
November 27, 2018

 浮動小数点数の話

Avatar for kato dayo

kato dayo

November 27, 2018

Other Decks in Programming

Transcript

  1. float_A 19.99 29.99 39.99 とあるテーブル CAST(flot_A * 100 AS INTEGER)

    浮動小数点数に100かけて、INTEGERでキャスト result 1998 2999 3999
  2. 2進数での小数表現 10進数 2進数 0.5 0.1 2-1 0.25 0.01 2-2 0.3

    0.010011001100110011… 0.29999999999999998889776975 近似
  3. PHPにおいての浮動小数点数 http://php.net/manual/ja/language.types.float.php から引用 浮動小数点数の精度 浮動小数点数の精度は有限です。 … さらに、十進数では正確な小数で表せる有理数、たとえば 0.1 や 0.7

    は、 二進数の浮動小数点 数としては正確に表現できません。したがって、それを内部的な二進数表現に変換する際 には、どうしても多少精度が落ちてしまいます。
  4. <?php $a = 1.6; $b = 8 – 6.4; echo

    $a == $b ? 'equal' : 'not equal'; php 7.2.12 on windows10 64bit not equal
  5. <?php ini_set(‘precision’, 23);  浮動小数点数に関して表示される最大桁数 $a = 1.6; $b =

    8 – 6.4; echo $a . "¥n"; echo $b . "¥n"; php 7.2.12 on windows10 64bit 1.6000000000000000888178 1.5999999999999996447286 $a : $b :
  6. <?php ini_set(‘precision’, 53);  浮動小数点数に関して表示される最大桁数 $a = pow(2, 63); 

    2の63乗 $b = pow(2, 63) + 1;  2の63乗+1 echo $a . "¥n"; echo $b . "¥n"; php 7.2.12 on windows10 64bit 9223372036854775808 9223372036854775808 $a : $b : 精度が悪くなる例 2の63乗 等しい pow(2, 63) + 1025 : 9223372036854777856