質問編集履歴

4

文言修正

2018/09/11 15:54

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -128,7 +128,7 @@
128
128
 
129
129
 
130
130
 
131
- の内容は現在の演算方法では不可能
131
+ の内容は現在の演算方法では有効桁数を超える限り実現できない
132
132
 
133
133
 
134
134
 

3

自己解決

2018/09/11 15:54

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -91,3 +91,45 @@
91
91
  という理解であっているでしょうか・・・?
92
92
 
93
93
  ですが4byteから8byteと領域が増えていてもそれは起きるもの・・?
94
+
95
+
96
+
97
+ 【追記(2)】
98
+
99
+ 原因として、
100
+
101
+ 倍精度実数から単精度実数への代入を行っているので丸め誤差が発生している。
102
+
103
+
104
+
105
+ 解決方法として、以下のものがある。
106
+
107
+ ・有効桁数を増やす。(両方Doubleにする。= 型を合わせる。)
108
+
109
+ ・直接計算を行って精度の高い計算を行った後、REAL(4)に丸める or 有効桁数で切り捨てる。
110
+
111
+
112
+
113
+ しかし今回のケースで、許容可能な誤差範囲が小数点7桁の丸めを許容しないので以上の二つは有効な手段にならない。
114
+
115
+
116
+
117
+ [参考にしたサイト1](https://dobon.net/vb/dotnet/beginner/floatingpointerror.html)
118
+
119
+ [参考にしたサイト2](http://www.cc.kyoto-su.ac.jp/~yamada/programming/float.html)
120
+
121
+
122
+
123
+ なので、
124
+
125
+ > FORTRANで
126
+
127
+ > REAL(8) の変数に REAL(4)の変数の値を代入して値が変わらないようにすることが可能なのかをご教示頂きたいです。
128
+
129
+
130
+
131
+ の内容は現在の演算方法では不可能。
132
+
133
+
134
+
135
+ ご回答いただいた内容の通りでした。

2

参考アドレスの追加。 回答していただいた内容についての追記を追加。

2018/09/11 15:50

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -70,4 +70,24 @@
70
70
 
71
71
  参考サイト
72
72
 
73
+ [先頭メモリアドレスについての参考サイト](http://cockscomb.info/bug_with_variable_type_in_fortran/)
74
+
73
- http://www.nag-j.co.jp/fortran/FI_4.html
75
+ [型についての参考サイト](http://www.nag-j.co.jp/fortran/FI_4.html)
76
+
77
+
78
+
79
+ 【追記(1)】
80
+
81
+ [こちらのサイト](https://qiita.com/Yachida/items/ed7df72063e52cc34887)を参考に、
82
+
83
+ 小数点部分に誤差が出る可能性があることはなんとなくイメージできたのですが
84
+
85
+
86
+
87
+ 代入時に桁数が違うもの(メモリのbyte数が違うもの)に変換しているため、変換前の値と異なることははあり得る。
88
+
89
+
90
+
91
+ という理解であっているでしょうか・・・?
92
+
93
+ ですが4byteから8byteと領域が増えていてもそれは起きるもの・・?

1

綴りを誤っていたのを修正。 Fortrun → FORTRAN

2018/09/11 14:48

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- Fortrunの型変換で値が変わる
1
+ FORTRANの型変換で値が変わる
test CHANGED
@@ -1,4 +1,4 @@
1
- Fortrun
1
+ FORTRAN
2
2
 
3
3
  REAL(8) の変数に REAL(4)の変数の値を代入して値が変わらないようにすることが可能なのかをご教示頂きたいです。
4
4