SlideShare a Scribd company logo
浮動小数点演算の無誤差変換
と
高精度計算
のおはなし
quintia
2008/11/22
今回のお題
このつぶやきで決めました
元ネタ
数学セミナー 2008年11月号 特集記事
(日本評論社)
D.E.Knuth:
The Art of Computer Programming,
Vol.2, 1969.
浮動小数点演算について
浮動小数点表現の限界
どういう意味なのか?
Knuth先生のお言葉
浮動小数点表現の限界
 (1+260) - 260
正解は 1
浮動小数点(単精度)で演算すると……
fl( 1 +260 ) = 260
fl( 260-260 ) = 0
 0 になってしまう!
fl( ) は
「実数での演算じゃないよ
浮動小数点での演算だよ」
という印
どういう意味なのか?
浮動小数点演算では「結合法則」が
成立しない場合がある、ということ
fl( (a + b) + c ) ≠ fl( a + (b + c) )
 fl( ) の中身は
「括弧を外して書いてはいけない」
のだ!
Knuth先生のお言葉
「a1+a2+a3」(略)などの数学的記法は,
もともと結合法則が成り立つことを前
提として作ってある.プログラマは,
結合法則が成り立つ暗黙の前提で考え
ないように,特に注意しなければなら
ない.
The Art of Computer Programming 2
第3版 日本語版 p217
無誤差変換
無誤差変換の概念
浮動小数点演算の誤差を計算する
誤差計算式の妙
Knuth先生のお言葉 ふたたび
無誤差変換の概念
無誤差変換というよりは、実数演算の解と、
浮動小数点演算の解との誤差という感覚
a + b = fl( a + b ) + x
 x の部分が計算によって生じる誤差
しかし、これを計算できるのか……?
浮動小数点演算の誤差を計算する
計算できる! (D.E.Knuth, 1969)
fl( (a - ((a + b) - (a - b)))
+ (b - (a - b)) )
乗算については
T.J.Dekker, (1971) によって
示された式がある
誤差計算式の妙(1)
fl( (a - ((a + b) - (a - b)))
+ (b - (a - b)) )
実数計算ならば括弧をはらえるので
ちょっと試してみる
a-a-b+a-b+b-a+b = 0
実数計算では必ず0になる式!
誤差計算式の妙(2)
fl( (a - ((a + b) - (a - b)))
+ (b - (a - b)) )
結合法則が成立 値が0 誤差が生じなかった
結合法則が成立しない 値が0以外 誤差が生じた
Knuth先生のお言葉 ふたたび
「a1+a2+a3」(略)などの数学的記法は,
もともと結合法則が成り立つことを前
提として作ってある.プログラマは,
結合法則が成り立つ暗黙の前提で考え
ないように,特に注意しなければなら
ない.
The Art of Computer Programming 2
第3版 日本語版 p217
高精度計算の例を簡単に
(1+260) - 260
1+260 解 260 誤差 1
260 - 260 解 0 誤差 0
解が0 誤差の総和が1
概念としては、解が1ということ
実際にコードを書いてみた
Javaで書いてみた
Javaの小数計算
Delphiで書いてみた
Javaで書いてみた
public static void main(String[] args) {
float a = 1;
float b = (float)Math.pow(2, 127);
System.out.println("b: "+b);
float u = a + b;
float c = a - b;
float v = (a-(u-c)) + (b-c);
System.out.println("u: "+u);
System.out.println("v: "+v);
}
結果
b: 1.7014118E38
u: 1.7014118E38
v: NaN
NaNが出てきた!
Javaの小数計算
Float や Double に以下の様な定義がある
 POSITIVE_INFINITY (正の無限大 )
 NEGATIVE_INIFINITY(負の無限大)
 NaN(非数)
+0.0 と -0.0 が区別されている
1.0 / +0.0 > POSITIVE_INFINITY
1.0 / -0.0 > NEGATIVE_INFINITY
0.0 / 0.0 > NaN
Delphiで書いてみた
計画通り!!
var
a,b,c,u,v: Single;
begin
a:=1.0;
b:=Power(2.0, 60.0);
u:=a+b;
c:=a-b;
v:=(a-(u-c))+(b-c);
ShowMessage(Format('%f , %f', [u, v]));
end;
結果: 1.15292150460684698E18 , 1.00
誤差 1
近似解 260
ありがとうございました

More Related Content

More from K Yamaguchi

裏切られる直感と、確率と精度のはなし
裏切られる直感と、確率と精度のはなし 裏切られる直感と、確率と精度のはなし
裏切られる直感と、確率と精度のはなし
K Yamaguchi
 
20100401 izakaya presen 2010 spring
20100401 izakaya presen 2010 spring20100401 izakaya presen 2010 spring
20100401 izakaya presen 2010 spring
K Yamaguchi
 
20081101 1000sp
20081101 1000sp20081101 1000sp
20081101 1000sp
K Yamaguchi
 
裏切られる直感と、確率と精度のはなし
裏切られる直感と、確率と精度のはなし裏切られる直感と、確率と精度のはなし
裏切られる直感と、確率と精度のはなし
K Yamaguchi
 
Python と型アノテーション
Python と型アノテーションPython と型アノテーション
Python と型アノテーション
K Yamaguchi
 
20150530 サトヤ+プロ生勉強会@マイクロソフト 東北支店 LT
20150530 サトヤ+プロ生勉強会@マイクロソフト 東北支店 LT20150530 サトヤ+プロ生勉強会@マイクロソフト 東北支店 LT
20150530 サトヤ+プロ生勉強会@マイクロソフト 東北支店 LT
K Yamaguchi
 
Apache Spark チュートリアル
Apache Spark チュートリアルApache Spark チュートリアル
Apache Spark チュートリアル
K Yamaguchi
 

More from K Yamaguchi (7)

裏切られる直感と、確率と精度のはなし
裏切られる直感と、確率と精度のはなし 裏切られる直感と、確率と精度のはなし
裏切られる直感と、確率と精度のはなし
 
20100401 izakaya presen 2010 spring
20100401 izakaya presen 2010 spring20100401 izakaya presen 2010 spring
20100401 izakaya presen 2010 spring
 
20081101 1000sp
20081101 1000sp20081101 1000sp
20081101 1000sp
 
裏切られる直感と、確率と精度のはなし
裏切られる直感と、確率と精度のはなし裏切られる直感と、確率と精度のはなし
裏切られる直感と、確率と精度のはなし
 
Python と型アノテーション
Python と型アノテーションPython と型アノテーション
Python と型アノテーション
 
20150530 サトヤ+プロ生勉強会@マイクロソフト 東北支店 LT
20150530 サトヤ+プロ生勉強会@マイクロソフト 東北支店 LT20150530 サトヤ+プロ生勉強会@マイクロソフト 東北支店 LT
20150530 サトヤ+プロ生勉強会@マイクロソフト 東北支店 LT
 
Apache Spark チュートリアル
Apache Spark チュートリアルApache Spark チュートリアル
Apache Spark チュートリアル
 

Recently uploaded

JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
0207sukipio
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
harmonylab
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
chiefujita1
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
Takayuki Nakayama
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
Toru Tamaki
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
t m
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
Matsushita Laboratory
 

Recently uploaded (8)

JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
 

浮動小数点演算の無誤差変換と高精度計算のおはなし