teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

.NET Framework CLIでの規定について追記。

2023/06/21 03:27

投稿

ikedas
ikedas

スコア4441

answer CHANGED
@@ -4,4 +4,13 @@
4
4
 
5
5
  丸めモードの効果もありますが、ほかの理由としては``MinutesPerTick`` の値も比較的「良い性質」を持っているように思います。たとえば、``_ticks`` の値が``TicksPerMinute``のちょうど整数倍になることは現実にはほぼないわけですが、ちょうどでなくても整数倍にごく近ければ、``TotalMinutes()`` の値が整数になりやすくなっているようです (きちんと理論的に分析したわけではないので感覚的な言いかたになりますが)。
6
6
 
7
- とはいえ、この結果も最近接偶数丸めモードを用いていることが前提です。もしもC#の言語仕様でどの丸めモードを用いるかが規定されていないのならば、結果は使っているC#処理系の実装に依存するということになってしまいます。その場合、ご質問でおっしゃっているような対策も考える必要がありそうですね。
7
+ とはいえ、この結果も最近接偶数丸めモードを用いていることが前提です。もしもC#の言語仕様でどの丸めモードを用いるかが規定されていないのならば、結果は使っているC#処理系の実装に依存するということになってしまいます。~~その場合、ご質問でおっしゃっているような対策も考える必要がありそうですね。~~ 規定されていました。
8
+
9
+ > The rounding mode defined in IEC 60559:1989[*1] shall be set by the CLI to "round to the nearest number"[*2], and neither the CIL nor the class library provide a mechanism for modifying this setting. (...)
10
+
11
+ * ECMA-335, 6th Edition (2012) [Common Language Infrastructure (CLI)](https://www.ecma-international.org/wp-content/uploads/ECMA-335_6th_edition_june_2012.pdf), "I.12.1.3 Handling of floating-point data types". p.75.
12
+
13
+ [*1] IEEE 754と同一内容の国際規格。
14
+ [*2] IEEE 754での属性名はroundTiesToEvenで、最近接偶数丸めを意味する。
15
+
16
+ ということで、.NET Framework共通言語仕様では浮動小数点演算の丸めモードとして最近接偶数丸めのみを提供しています。ほかの丸めモードによって期待しない結果になることはないと言えます。

1

typo

2023/06/21 00:48

投稿

ikedas
ikedas

スコア4441

answer CHANGED
@@ -4,4 +4,4 @@
4
4
 
5
5
  丸めモードの効果もありますが、ほかの理由としては``MinutesPerTick`` の値も比較的「良い性質」を持っているように思います。たとえば、``_ticks`` の値が``TicksPerMinute``のちょうど整数倍になることは現実にはほぼないわけですが、ちょうどでなくても整数倍にごく近ければ、``TotalMinutes()`` の値が整数になりやすくなっているようです (きちんと理論的に分析したわけではないので感覚的な言いかたになりますが)。
6
6
 
7
- とはいえ、この結果も近接偶数丸めモードを用いていることが前提です。もしもC#の言語仕様でどの丸めモードを用いるかが規定されていないのならば、結果は使っているC#処理系の実装に依存するということになってしまいます。その場合、ご質問でおっしゃっているような対策も考える必要がありそうですね。
7
+ とはいえ、この結果も近接偶数丸めモードを用いていることが前提です。もしもC#の言語仕様でどの丸めモードを用いるかが規定されていないのならば、結果は使っているC#処理系の実装に依存するということになってしまいます。その場合、ご質問でおっしゃっているような対策も考える必要がありそうですね。