[解決済み】Python 3.xの丸め動作について
質問
を読み直したところです。 Python 3.0の新機能について と記載があります。
round() 関数の丸め方と戻り値の型が変更されました。 完全に半分の場合は、最も近い偶数番目の結果に丸められるようになりました。 はゼロから離れる。(例えば、round(2.5) が返すのは2ではなく 3.)
と のドキュメントは ラウンド :
round() をサポートする組み込み型では、値は次のように丸められます。 10のマイナスn乗の最も近い倍数です。 同じように近い場合は、偶数選択で丸められます。
ということで、以下 v2.7.3 :
In [85]: round(2.5)
Out[85]: 3.0
In [86]: round(3.5)
Out[86]: 4.0
という感じです。しかし、現在 v3.2.3 :
In [32]: round(2.5)
Out[32]: 2
In [33]: round(3.5)
Out[33]: 4
これは直感的でなく、私が理解していることに反しているようです。 丸め(そして、人をつまずかせることになる)。英語は私の母国語ではありませんが これを読むまで、丸めの意味を知っているつもりでした :-)。 v3が導入されたときに、何らかの議論があったはずです。 が、検索しても正当な理由が見つかりませんでした。
- なぜこのように変更されたのか、どなたかお分かりになる方はいらっしゃいますか?
- 他に主流のプログラミング言語(例. C、C++、Java、Perl。 このような(私には一貫性のない)丸め方をするものはありますか?
何が足りないのでしょうか?
UPDATE @Li-aungYipさんのコメント re "Banker's rounding" から正しい検索語・キーワードをいただき、このSO問を見つけました。 なぜ.NETはデフォルトでバンカーズ・ラウンディングを使用するのですか? ということで、じっくりと読ませていただきます。
どのように解決するのですか?
Python 3 の方法(" と呼ばれる。 半分を偶数にする は、最近の標準的な丸め方式と考えられていますが、言語によってはまだバスに乗っていない実装もあります。
シンプルな「" 常に0.5切り上げ "テクニックは、高い方の数値に若干の偏りが生じます。大量の計算を行う場合、これは大きな問題となります。Python 3.0のアプローチでは、この問題が解消されます。
一般的に使われている丸めの方法は1つだけではありません。浮動小数点演算の国際標準である IEEE 754 では、以下のように定義されています。 5種類の丸め方 (Python 3.0ではデフォルトで使用されています)。そして その他にも .
この動作は、それほど広く知られているわけではありません。AppleScriptは、私の記憶が正しければ、この丸め方式を早くから採用していました。その
round
コマンドを使用します。
にはいくつかのオプションがありますが、IEEE754と同じようにround-toward-evenがデフォルトです。を実装したエンジニアは
round
コマンドは、「学校で習ったように動作させてほしい」という要望が多く、うんざりしていたので、まさにそれを実現したのです。
round 2.5 rounding as taught in school
は有効なAppleScriptコマンドです :-)
関連
-
PicgoのイメージベッドツールをPythonで実装する
-
[解決済み】Pythonスクリプトで「Expected 2D array, got 1D array instead: 」というエラーが発生?
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] Pythonで例外を手動で発生(スロー)させる
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python カメの描画コマンドとその例
-
Python jiabaライブラリの使用方法について説明
-
Python interpreted model libraryによる機械学習モデル出力の可視化 Shap
-
任意波形を生成してtxtで保存するためのPython実装
-
Pythonの@decoratorsについてまとめてみました。
-
[解決済み】RuntimeWarning: 割り算で無効な値が発生しました。
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み】Python regex AttributeError: 'NoneType' オブジェクトに 'group' 属性がない。
-
[解決済み】終了コード -1073741515 (0xC0000135)でプロセス終了)
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない