数値精度のニュアンス: `round()`、 `ceil()`、および `floor()`落とし穴
round()は「ラウンドハーフからエヴフォート」を使用し、「ラウンドハーフアップ」ではなく使用するため、ラウンド(2.5)は2を返し、ラウンド(3.5)を返して統計的バイアスを最小限に抑えます。 2。フローティングポイント表現エラーは、2.675などの数値を不正確に保存し(例えば、2.6749999999999997)、2.68の代わりに2.68の代わりに2.67を返すようにリーディングし、正確な小数のために必要なラウンド_HALF_UPを使用します。 3。CEIL()およびFLOOR()はそれぞれ正と負の無限に向かって丸くなるため、Math.Ceil(-2.3)は-2(-3ではなく)およびMath.Floor(-2.3)を返します。 4.これらの関数は、整数の結果に対してINTを返しますが、渡されずにタイプエラーを上げ、非常に大きなフロートがオーバーフローする可能性があるため、有効な入力タイプが必要です。これらの行動を理解することで、財務、科学、および一般的なアプリケーションでの正しい使用が保証されます。
プログラミングで浮動小数点数を使用する場合、丸め、丸め、丸めなどのように一見シンプルな操作は、驚くべき、時にはイライラする結果につながる可能性があります。 round()
、 ceil()
、 floor()
などの機能は毎日使用されますが、その動作、特にエッジケースの周りでは、経験豊富な開発者でさえもつまずくことができます。ニュアンスと一般的な落とし穴を分解しましょう。

1。round round()
は常に「ラウンドハーフアップ」ではありません
多くの人はround()
伝統的な学校の本の丸み(ラウンドハーフアップ)に続くと仮定していますが、Pythonや他の多くの言語では、 「ラウンドハーフから均一」を使用します。
print(round(2.5))#出力:2 print(round(3.5))#出力:4
これが起こっていることです:

-
2.5
は、2〜3→ラウンドの半分の中で、最も近い偶数の偶数です:2。 -
3.5
→ラウンドは4(偶数)まで。
これにより、統計計算のバイアスが減少しますが、 2.5 → 3
期待している場合は予想外になる可能性があります。
落とし穴:半分については一貫した上向きの丸めを期待していますが、パリティに基づいて一貫性のない結果を得ることができます。

回避策:従来の丸めが必要な場合:
数学をインポートします def round_half_up(n、decimals = 0): Multiplier = 10 **小数 Math.floor(n *乗数0.5) /乗数を返します
2。浮動小数点表現エラー
基本的な10進数でさえ、常にバイナリの浮動小数点で正確に表現することはできず、微妙なエラーにつながることはできません。
print(round(2.675、2))#出力:2.67、2.68ではなく!
なぜ? 2.675
、IEEE 754の制限により、実際には2.6749999999999997
として保存されているためです。
落とし穴:あなたはきれいな小数を丸めていると思うが、下にあるフロートはわずかに少ないので、丸くなります。
解決策:正確な算術のためにdecimal.Decimal
を使用してください:
小数点以降、小数点以降、round_half_up rounded = decimal( '2.675')。Quantize(decimal( '0.01')、round_half_up) 印刷(丸)#出力:2.68
3。マイナス数のceil()
およびfloor()
ceil()
とfloor()
は簡単です。否定的な数が写真に入るまで。
-
ceil(x)
→ x以上の最小整数 floor(x)
→ x以下の最大整数
例:
数学をインポートします print(math.ceil(-2.3))#出力:-2 print(math.floor(-2.3))#出力:-3
誤って考えるのは簡単です:
- 「天井は常に丸みを帯びています」→しかし、「アップ」はポジティブな無限に向かっていることを意味します。
- 「床は常に丸くなります」→ネガティブインフィニティに向かって。
落とし穴: ceil(-2.3)
は-3
であると仮定すると、丸くなるような感じがします。
ヒント:数字の方向に関して考えてください:
-
ceil
→右に移動します floor
→左に移動します
4.処理とエッジのタイプ
これらの関数は、エッジ入力で異なる動作をします。
Math.floor(3.0)#→3(int) round(3.0)#→3(pythonのintですが、いくつかのコンテキストに浮かぶ) Math.ceil(3)#→3(int)
しかし:
ラウンド(3.675、2)#整数であっても、フロートを返します
また、注意してください:
-
math.floor(None)
→TypeRror - INT範囲を超えて大きなフロート→オーバーフローの可能性
inf
andnan
:Math.floor(float( 'inf'))#→inf Math.ceil(float( 'nan'))#→valueerrorまたはnan、コンテキストに応じて
キーテイクアウトの概要
-
round()
ラウンドハーフを使用して均等に使用します。金銭的な丸めに直感的ではありません。 - flowing流量の不正確さは、
round()
奇妙に動作させる可能性があります。精度が重要な場合は、Decimal
使用します。 -
ceil()
およびfloor()
大きさで「上」または「下」ではなく、正/負の無限に向かって働きます。 - cultive常に入力タイプを検証し、
inf
、nan
、多数などのエッジ値を考慮してください。
基本的に:これらの機能は、ルールを理解すると予測可能ですが、それらのルールは常に数学クラスに期待するものではありません。デフォルト、テストエッジのケース、およびお金または精度がラインにあるときの
Decimal
のリーチを把握します。以上が数値精度のニュアンス: `round()`、 `ceil()`、および `floor()`落とし穴の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。
-

ホットAIツール

Undress AI Tool
脱衣画像を無料で

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Stock Market GPT
AIを活用した投資調査により賢明な意思決定を実現

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

bcmathisentialforAccuratecurateptocurrencycalcatulationsinphpbecuseating-pointarithmeticincecceptesuncectesubleroundingErrors.1..2 Yieldimimpreciseresults(e.g.、0.300000000000000000000000000precyptowsyptowyprectoyptoyprecyptoyprecyptoyppowsyptowprecyptowprecyptowprecyptowprecyptowprecyptowprecyptowprecyptowpreciseResults)

浮動小数点数は不正確です。PHPの一般的な問題です。答えは、IEEE754ダブルエシジョン形式を使用していることです。これにより、小数を正確に表現できなくなります。 1.0.1や0.2などの数値は、バイナリの無限ループ10進数であり、コンピューターはエラーを引き起こすために切り捨てられる必要があります。 2。浮動小数点数を比較する場合、abs($ a- $ b)など、==の代わりに許容範囲を使用する必要があります。

round()は、「roundhalftoeven」を「roundhalfup」ではなく使用します

平均を計算します:array_sum()を使用して要素の数で除算して平均を取得します。 2。中央値を計算します:並べ替え後、中間値を取得し、要素さえあるときに2つの中間数の平均を取得します。 3。標準偏差を計算します。最初に平均を見つけてから、各値と平均の平方差の平均(サンプルはn-1)を計算し、最後に平方根を取得します。これらの3つの機能をカプセル化することにより、基本的な統計ツールを構築し、中小規模のデータの分析に適しており、空の配列と非数値入力の処理に注意を払い、外部ライブラリに依存することなくデータのコア統計的特徴を実現できます。

usenativemath forfast、small operations withinphp_int_max where precisionlossis notanissue.2.usebcmatheforexactdecimalathmeticlikefinancialcalculation、特に特に環境を保持する場合は特に、提案と予測を導入する場合

モジュラーリットメティジーインシンスインフェッジグラプグラフィックアプリケーションデスペフプノットパフォーマンス - パフォーマンス

AvectorInphpGraphicsSposition、direction、orvelocityusinglasslikevector3dwithx、y、zcomponents.2.basicoperationsincludeaddition、減算、筋肉拡張、および拡張性フォームメントアンドスケーリング

gmpisessentyfor forhandlinglargeintegersinphpbeyondnativelimits.1.gmpenablessablessablessisistraryinteintegerarithticusing inting intingistimized clibraries、unterinative integertertegersthationtegertegerstegertegerstegerstegerstegersはbasedring.2.usgmpforheyintegeroperiationsを使用してください
