ホームページ >バックエンド開発 >Python チュートリアル >Pythonの数学モジュール:小数および分数

Pythonの数学モジュール:小数および分数

Jennifer Aniston
Jennifer Anistonオリジナル
2025-03-09 09:15:14621ブラウズ

Mathematical Modules in Python: Decimal and Fractions

最も基本的な数学操作でさえ、間違った結果をもたらすことがあります。これは、特定の数値の正確な値を保存する際の制限によるものです。 Pythonのdecimalモジュールを使用して、これらの制限を克服できます。同様に、以前のチュートリアルで学んだmathおよびcmathモジュールは、分数ベースの算術操作を実行するのに役立ちません。ただし、pythonのfractionsモジュールはたまたまそれを行います。

このチュートリアルでは、これら2つのモジュールと提供するさまざまな機能を紹介します。

10進数モジュールを使用して

from decimal import Decimal

Decimal(121)
# 返回 Decimal('121')

Decimal(0.05)
# 返回 Decimal('0.05000000000000000277555756')

Decimal('0.05')
# 返回 Decimal('0.05')

Decimal((0, (8, 3, 2, 4), -3))
# 返回 Decimal('8.324')

Decimal((1, (8, 3, 2, 4), -1))
# 返回 Decimal('-832.4')
ご覧のとおり、

関数の値は、計算の精度、丸めルール、および例外を上げる動作を決定します。 getcontext()

関数を使用して、計算の現在のコンテキストを取得して設定できます。 setcontext()ステートメントを使用して、計算のコンテキストを一時的に変更します。 with

モジュールには、丸めアルゴリズムとしての計算に使用できる3つの組み込みコンテキストがあります。これらのコンテキストのもう1つの違いは、例外を追跡する動作です。

数値オーバーフロー、無効な動作、およびゼロによる分割に関連する例外はありません。 ROUND_HALF_UPは、ほぼすべての例外を有効にします。これはデバッグに最適ですが、ROUND_HALF_EVENは計算のデフォルトコンテキストとして使用されます。 ROUND_HALF_EVEN DefaultContext以下は、さまざまなコンテキストを使用して単純な分割のために異なる結果を得る方法の例です。 BasicContext DefaultContextさまざまなコンテキストの精度と丸めアルゴリズムの違いに注目することに加えて、

の下では、0の分割結果は

であることを観察することもできます。

import decimal
from decimal import ROUND_DOWN, ROUND_UP, Decimal as D

dec_a = D('0.153')
dec_b = D('0.231')
zero = D('0')

print("无上下文(使用默认值): ", dec_a/dec_b)
# 无上下文(使用默认值):  0.6623376623376623376623376623

decimal.setcontext(decimal.BasicContext)
print("基本上下文: ", dec_a/dec_b)
# 基本上下文:  0.662337662

decimal.setcontext(decimal.ExtendedContext)
print("扩展上下文: ", dec_a/dec_b)
# 扩展上下文:  0.662337662
print("扩展上下文: ", dec_b/zero)
# 扩展上下文:  Infinity

decimal.setcontext(decimal.DefaultContext)
print("默认上下文: ", dec_a/dec_b)
# 默认上下文:  0.6623376623376623376623376623

with decimal.localcontext() as l_ctx:
    l_ctx.prec = 5
    l_ctx.rounding = ROUND_UP

    print("局部上下文: ", dec_a/dec_b)
    # 局部上下文:  0.66234

ExtendedContextInfinityの多くの関数は、コンテキストオブジェクトをパラメーターとして受け入れて、計算を実行します。これにより、計算されたコンテキストまたは精度の値の設定を絶えず避けることができます。

分数モジュールを使用してdecimal

時々、スコアでさまざまな操作を実行する必要がある状況に遭遇する場合や、最終結果がスコアである必要がある場合があります。この場合、
import decimal
from decimal import Decimal as D


print(D('22').sqrt(decimal.BasicContext))
# 4.69041576

print(D('22').sqrt(decimal.ExtendedContext))
# 4.69041576

print(D('22').sqrt(decimal.DefaultContext))
# 4.690415759823429554565630114

with decimal.localcontext() as l_ctx:
    l_ctx.prec = 5

    print(D('22').sqrt(l_ctx))
    # 4.6904
モジュールは非常に役立ちます。

作成スコアを作成

fractions

モジュールを使用すると、数値、浮動小数点数、小数点、さらには文字列から

インスタンスを作成できます。

モジュールのように、浮動小数点数から画分を作成する際には、このモジュールにいくつかの問題があります。ここにいくつかの例があります:

fractions 画分の算術演算Fraction decimal加算や減算など、通常の数値などの画分で簡単な数学操作を実行することもできます。

from decimal import Decimal

Decimal(121)
# 返回 Decimal('121')

Decimal(0.05)
# 返回 Decimal('0.05000000000000000277555756')

Decimal('0.05')
# 返回 Decimal('0.05')

Decimal((0, (8, 3, 2, 4), -3))
# 返回 Decimal('8.324')

Decimal((1, (8, 3, 2, 4), -1))
# 返回 Decimal('-832.4')

ポートフォームおよび分母関数

モジュールには、limit_denominator(max_denominator)などのいくつかの重要な方法もあります。この方法では、与えられた分数に最も近い分数を見つけて返すことができます。また、max_denominator属性を使用して、特定の画分の分子(最低項として表される)とnumerator属性を返すこともできます。分母を返すこともできます。 denominator

import decimal
from decimal import ROUND_DOWN, ROUND_UP, Decimal as D

dec_a = D('0.153')
dec_b = D('0.231')
zero = D('0')

print("无上下文(使用默认值): ", dec_a/dec_b)
# 无上下文(使用默认值):  0.6623376623376623376623376623

decimal.setcontext(decimal.BasicContext)
print("基本上下文: ", dec_a/dec_b)
# 基本上下文:  0.662337662

decimal.setcontext(decimal.ExtendedContext)
print("扩展上下文: ", dec_a/dec_b)
# 扩展上下文:  0.662337662
print("扩展上下文: ", dec_b/zero)
# 扩展上下文:  Infinity

decimal.setcontext(decimal.DefaultContext)
print("默认上下文: ", dec_a/dec_b)
# 默认上下文:  0.6623376623376623376623376623

with decimal.localcontext() as l_ctx:
    l_ctx.prec = 5
    l_ctx.rounding = ROUND_UP

    print("局部上下文: ", dec_a/dec_b)
    # 局部上下文:  0.66234
スコアと数学モジュール

このモジュールを使用して、

モジュールにさまざまな関数を使用して、分数ベースの計算を実行することもできます。 math

import decimal
from decimal import Decimal as D


print(D('22').sqrt(decimal.BasicContext))
# 4.69041576

print(D('22').sqrt(decimal.ExtendedContext))
# 4.69041576

print(D('22').sqrt(decimal.DefaultContext))
# 4.690415759823429554565630114

with decimal.localcontext() as l_ctx:
    l_ctx.prec = 5

    print(D('22').sqrt(l_ctx))
    # 4.6904
要約

これら2つのモジュールは、小数点と分数の一般的な操作を実行するのに十分なものである必要があります。前回のセクションに示すように、これらのモジュールを

モジュールで使用して、希望する形式のさまざまな数学関数の値を計算できます。 math このシリーズの次のチュートリアルでは、pythonの

モジュールを学習します。

以上がPythonの数学モジュール:小数および分数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。