2026/06/28(日)kv-0.4.61
今回は、精度保証は破れていないものの精度で損をする可能性があった不具合の修正です。具体的には、文字列からdoubleなどの数値へ上向き丸めで変換するとき、"9007199254740992" (ぴったり2^{53})などいくつかの誤差無しでdoubleに変換できるはずの数が1ulp上に丸まってしまうというバグがありました。これにより、区間xをx = "9007199254740992";みたいに初期化すると本来幅0の区間になるはずが僅かに幅のある区間になって損をしてしまっていました。
この不具合を修正しました。
これにより、例えば以下の文字列を上向き丸めで変換したときの結果が正常になりました。
| 変換先の型 | 文字列 | 修正前 | 修正後 |
|---|---|---|---|
| double | "9007199254740992" | 9007199254740994 | 9007199254740992 |
| long double | "18446744073709551616" | 18446744073709551618 | 18446744073709551616 |
| dd | "162259276829213372398777265029120" | 1.6225927682921336\cdots \times 10^{32} + 9007199254740994 | 1.6225927682921336\cdots \times 10^{32} + 9007199254740992 |
| ddx | "680564733841876926963642703010955526144" | 6.80564733841876927\cdots\times 10^{38} -36893488147419103230 | 6.80564733841876927\cdots\times 10^{38} -36893488147419103232 |