統計解析R たぶんpart3くらい (587レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
369: 2021/05/09(日)09:52 ID:SqRAraa2(1) AAS
確認には直接フォーマット系の関数を使った方が簡単だと思う。
``` {r}
sprintf ('%.64f', 0.15);
```
多くの四捨五入の実装は`10`を掛ける演算を使っているが、注意が必要になる。
C99の標準関数を使えば、`round (x, digit = 0)`に相当する四捨五入は得られる。
``` {Rcpp}
#include <Rcpp.h>
#include <cmath>
// [[Rcpp::plugins(cpp17)]]
// [[Rcpp::export]]
double std_round (double x) {
return std::round (x);
}
```
`std_round`を使って`round (x, digit = 1)`に相当することをやろうとして、
次のようなコードを書くと、オワコンがやって来る。
``` {r}
sprintf ('%.64f', std_round (0.15 * 10) / 10);
```
数値計算と表示との整合性がとれていないにも関わらず、通常のプリント文を
見ている限り気が付きにくい厄介なバグになる。敗因は次の計算にある。
``` {r}
sprintf ('%.64f', 0.15 * 10);
```
四捨五入のスマートな実装方法は思いつかない
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 1.504s*