質問編集履歴
4
文言修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -63,6 +63,6 @@
|
|
63
63
|
> FORTRANで
|
64
64
|
> REAL(8) の変数に REAL(4)の変数の値を代入して値が変わらないようにすることが可能なのかをご教示頂きたいです。
|
65
65
|
|
66
|
-
の内容は現在の演算方法では
|
66
|
+
の内容は現在の演算方法では有効桁数を超える限り実現できない。
|
67
67
|
|
68
68
|
ご回答いただいた内容の通りでした。
|
3
自己解決
title
CHANGED
File without changes
|
body
CHANGED
@@ -44,4 +44,25 @@
|
|
44
44
|
代入時に桁数が違うもの(メモリのbyte数が違うもの)に変換しているため、変換前の値と異なることははあり得る。
|
45
45
|
|
46
46
|
という理解であっているでしょうか・・・?
|
47
|
-
ですが4byteから8byteと領域が増えていてもそれは起きるもの・・?
|
47
|
+
ですが4byteから8byteと領域が増えていてもそれは起きるもの・・?
|
48
|
+
|
49
|
+
【追記(2)】
|
50
|
+
原因として、
|
51
|
+
倍精度実数から単精度実数への代入を行っているので丸め誤差が発生している。
|
52
|
+
|
53
|
+
解決方法として、以下のものがある。
|
54
|
+
・有効桁数を増やす。(両方Doubleにする。= 型を合わせる。)
|
55
|
+
・直接計算を行って精度の高い計算を行った後、REAL(4)に丸める or 有効桁数で切り捨てる。
|
56
|
+
|
57
|
+
しかし今回のケースで、許容可能な誤差範囲が小数点7桁の丸めを許容しないので以上の二つは有効な手段にならない。
|
58
|
+
|
59
|
+
[参考にしたサイト1](https://dobon.net/vb/dotnet/beginner/floatingpointerror.html)
|
60
|
+
[参考にしたサイト2](http://www.cc.kyoto-su.ac.jp/~yamada/programming/float.html)
|
61
|
+
|
62
|
+
なので、
|
63
|
+
> FORTRANで
|
64
|
+
> REAL(8) の変数に REAL(4)の変数の値を代入して値が変わらないようにすることが可能なのかをご教示頂きたいです。
|
65
|
+
|
66
|
+
の内容は現在の演算方法では不可能。
|
67
|
+
|
68
|
+
ご回答いただいた内容の通りでした。
|
2
参考アドレスの追加。 回答していただいた内容についての追記を追加。
title
CHANGED
File without changes
|
body
CHANGED
@@ -34,4 +34,14 @@
|
|
34
34
|
よろしくお願い致します。
|
35
35
|
|
36
36
|
参考サイト
|
37
|
+
[先頭メモリアドレスについての参考サイト](http://cockscomb.info/bug_with_variable_type_in_fortran/)
|
37
|
-
http://www.nag-j.co.jp/fortran/FI_4.html
|
38
|
+
[型についての参考サイト](http://www.nag-j.co.jp/fortran/FI_4.html)
|
39
|
+
|
40
|
+
【追記(1)】
|
41
|
+
[こちらのサイト](https://qiita.com/Yachida/items/ed7df72063e52cc34887)を参考に、
|
42
|
+
小数点部分に誤差が出る可能性があることはなんとなくイメージできたのですが
|
43
|
+
|
44
|
+
代入時に桁数が違うもの(メモリのbyte数が違うもの)に変換しているため、変換前の値と異なることははあり得る。
|
45
|
+
|
46
|
+
という理解であっているでしょうか・・・?
|
47
|
+
ですが4byteから8byteと領域が増えていてもそれは起きるもの・・?
|
1
綴りを誤っていたのを修正。 Fortrun → FORTRAN
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
|
1
|
+
FORTRANの型変換で値が変わる
|
body
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
FORTRANで
|
2
2
|
REAL(8) の変数に REAL(4)の変数の値を代入して値が変わらないようにすることが可能なのかをご教示頂きたいです。
|
3
3
|
|
4
4
|
REAL(8)はVsualStudioのウォッチで見てみた時の型で、宣言はdouble precisionです。
|