Pythonのdecimalモジュールを使って指数や平方根、対数等を作る方法

スポンサーリンク

やあ、みんな!今回は、興味深いモジュールの1つであるPythonのDecimalモジュールについて見ていきたいと思います。

どんな分野でも、数学的な操作を行うための関数を検索する必要性に出くわすことがあります。

Pythonのdecimalモジュールは、私たちが必要とするすべての数学的関数を提供しています。

それでは、始めましょう。

スポンサーリンク

Python の decimal モジュールを理解する

Pythonのdecimalモジュールには、数値データを扱い、それに対してさまざまな数学的操作を実行するためのさまざまな関数が含まれています。

decimal モジュールを使用すると、プログラム全体で効率的に 10 進数を処理することができます

10進数モジュールは、10進数値の精度の問題を制御し、克服するための関数を提供します。


10進モジュールの必要性を理解した上で、このモジュールが提供する重要な関数をいくつか見てみましょう。

これらの関数を使用するには、以下のようにモジュールをインポートする必要があります。

import decimal

The Decimal Module Functions and Implementation (10進モジュールの機能と実装)

10進数や数値データに対してさまざまな算術演算を行い、結果を向上させることができます。

小数点以下の数値は、以下のように decimal.Decimal() 関数 を使って定義できます。

構文は以下の様な感じです。

import decimal
variable = decimal.Decimal(decimal-number)

さらに、decimal モジュールの組み込み関数である decimal.getcontext().prec 関数を使用すると、小数点以下の数値の結果の精度を制御することができます

構文は以下の様な感じです。

decimal.getcontext().prec = precision value

以下の関数を使用すると、小数点以下の演算を効率よく、かつ高速に行うことができます。

1. exp() 関数 – 指数の計算

exp() 関数は、渡された特定の小数点の数値の指数値 e^x を計算します。

構文は以下の様な感じです。

decimal.Decimal(decimal-number).exp()

例えば、以下の様になります。

import decimal as d
 
d.getcontext().prec = 5
 
#Intializing with an addition operation
val = d.Decimal(12.201) + d.Decimal(12.20)
 
#Calculating exponential of the decimal value
exp = val.exp()
 
#variable with no calculations
no_math = d.Decimal(1.131231)
 
print("Sum: ",val)
print("Exponential: ", exp)
print(no_math)

結果は以下の通りです。

Decimal Number:  24.401                                                                                                      
3.9557E+10                                                                                                                   
1.131231000000000097571728474576957523822784423828125  

出力の合計桁数が5桁であることに気づいただろうか?これはここで設定した精度値によるものです。

一つ覚えておいてほしいのは、精度値は2つの小数に対して数学的操作を行うときに適用されるのであって、上記の「no_math」変数で示したように、値を持つ変数を直接起動するときには適用されないということです。

2. sqrt()関数 – 平方根

sqrt() 関数は、渡された 10 進数の平方根を計算し、返します。

構文は以下の様な感じです。

decimal.Decimal(decimal-number).sqrt()

例えば、以下の様になります。

import decimal as d
 
d.getcontext().prec = 3
 
val = d.Decimal(122.20)
sqrt = val.sqrt()
print("Decimal Number: ",val)
print("Square root of the decimal number: ",sqrt)

結果は以下の通りです。

Decimal Number:  122.2000000000000028421709430404007434844970703125
Square root of the decimal number:  11.1

ここでも、宣言された値が完全な10進数であるのに対して、計算された値は3桁の精度に従っていることに注意してください。

もっと多くの数学的操作を知りたい方は、Pythonのmathモジュールについての記事を読んでください。

3. 対数関数

Decimal モジュールは、小数点以下の数値の対数を計算するために、以下の関数を提供します。

  • decimal.ln()
  • decimal.log10()

decimal.ln() 関数は、10 進数の自然対数を返します。

decimal.Decimal(decimal-number).ln()

decimal.log10()関数は、渡された10進数の底の対数を計算する関数です。

decimal.Decimal(decimal-number).log10()

例えば、以下の様になります。

import decimal as d
 
d.getcontext().prec = 2
 
val = d.Decimal(122.20)
 
log = val.ln()
print("Natural log value of the decimal number: ",log)
 
log_10 = val.log10()
print("Log value with base 10 of the decimal number: ",log_10)

結果は以下の通りです。

Natural log value of the decimal number:  4.8
Log value with base 10 of the decimal number:  2.1

4. compare() 関数

decimal.compare() 関数は、2つの小数点以下の数値を比較し、条件に応じて次のような値を返します。

  • 最初の10進数が2番目の10進数より小さい場合は-1が返されます。
  • 最初の10進数が2番目の10進数より大きい場合、1を返します。
  • 両小数点値が等しい場合は、0を返します。

例えば、以下の様になります。

import decimal as d
 
valx = d.Decimal(122.20)
valy = d.Decimal(123.01)
 
print("Value 1: ",valx)
print("Value 2: ",valy)
 
compare = valx.compare(valy)
print(compare)

結果は以下の通りです。

Value 1122.2000000000000028421709430404007434844970703125
Value 2123.0100000000000051159076974727213382720947265625
-1

5. 5. Copy_abs()関数

decimal.copy_abs() 関数は、渡された符号付き 10 進数の絶対値を返します。

構文は以下の通りです。

構文:

decimal.Decimal(signed decimal number).copy_abs()

例えば、以下の様になります。

構文:

import decimal as d
 
valx = d.Decimal(-122.20)
print("Value 1: ",valx)
 
absolute = valx.copy_abs()
print("Absolute value of the given decimal number: ",absolute)

結果は以下の通りです。

Value 1-122.2000000000000028421709430404007434844970703125
Absolute value of the given decimal number:  122.2000000000000028421709430404007434844970703125

6. Max関数とMin関数

Python の decimal モジュールには、小数点の数値の最小値と最大値を計算する以下の関数があります。

  • min() 関数。min()関数:小数点以下の2つの値の最小値を返します。
  • max()関数 max() 関数:小数点以下の数値の最大値を返します。
#Syntax for min() function-
decimal1.min(decimal2)
 
#Syntax for max() function-
decimal1.max(decimal2)

例えば、以下の様になります。

import decimal as d
 
valx = d.Decimal(122.20)
valy = d.Decimal(123.01)
 
print("Value 1: ",valx)
print("Value 2: ",valy)
 
min_val = valx.min(valy)
print("The minimum of the two values: ",min_val)
 
max_val = valx.max(valy)
print("The maximum of the two values: ",max_val)

結果は以下の通りです。

Value 1122.2000000000000028421709430404007434844970703125
Value 2123.0100000000000051159076974727213382720947265625
The minimum of the two values:  122.2000000000000028421709430
The maximum of the two values:  123.0100000000000051159076975

7. 10進数モジュールによる論理演算

10進モジュールは、10進数に対してAND、OR、XORなどの論理演算を行うための関数を内蔵しています。

  • logical_and()関数。2 つの 10 進数に対して論理 AND 演算を行い、結果を返します。
  • logical_or()関数:2つの10進数に対して論理AND演算を行い、結果を返す。論理和(OR)関数: 2 つの 10 進数に対して論理和演算を行い、結果を返す。
  • logical_xor()関数:2つの10進数の論理和をとり、その結果を返す。論理XOR()関数: 2 つの 10 進数に対して論理 XOR 演算を行い、その結果を返します。
#Syntax for logical_and() function-
decimal1.logical_and(decimal2)
 
#Syntax for logical_or() function-
decimal1.logical_or(decimal2)
 
#Syntax for logical_xor() function-
decimal1.logical_xor(decimal2)

例えば、以下の様になります。

例えば、以下の様になります。

結果は以下の通りです。

import decimal as d
 
valx = d.Decimal(1001)
valy = d.Decimal(1111)
 
print("Value 1: ",valx)
print("Value 2: ",valy)
 
AND = valx.logical_and(valy)
print("The logical AND value of the two decimals: ",AND)
 
OR = valx.logical_or(valy)
print("The logical OR value of the two decimals: ",OR)
 
XOR = valx.logical_xor(valy)
print("The logical XOR value of the two decimals: ",XOR)

まとめ

ここまでで、このトピックは終了です。

何か疑問があれば、お気軽にコメントください。

タイトルとURLをコピーしました