デフォルトでは、Pythonは小数点を「float」、64ビットのフローティングポイント番号として保存します。これは理論的には約2.2E-308〜1.8E+308の値範囲を達成しますが、「フロート」にデシマルが保存される方法により、精度ははるかに悪化しています。ベース2（バイナリ）画分を使用します。たとえば、1/2は0.1、1/8は0.001です。最終的には、0.3333としてベース10の割合に1/3を保存しようとするときに最終的に精密な制限に達するように、「フロート」の範囲値内のすべての数値を正確に表すことができません：ベース2の1/10繰り返し0.00011001100になります。したがって、入力が1E-15ほど小さい場合、そのようなエラーは結果にとって重要になり、実際の導関数との違いが生じます。
この問題を解決するために、正確に表される小数数を提供する「小数」モジュールを使用できます。例は次のとおりです。

`` python
小数点以降、小数点以降、getContext

＃小数の精度を設定します。デフォルトは28です
getContext（）。prec = 26

＃他の変数を小数点に変換します。ただし、フロートは精密な問題をもたらします
A = Decimal（ "1.2375"）#decimal（ '1.2375'）
b = 10進（1）/小数（7）#decimal（ '0.14285714285714285714285714'）
C = Decimal（6.325）#decimal（ '6.3250000000000000017763568394'）
`` `
By default, python stores a decimal as `float`, a 64-bit floating-point number. Though this theoretically achieves a value range of about 2.2e-308 ~ 1.8e+308, the precision is much worse due to how decimals are stored in `float`: it uses base 2 (binary) fractions. For example, 1/2 is 0.1, and 1/8 is 0.001. Just like we will eventually hit a precision limit when trying to store 1/3 in a base 10 fraction as 0.3333..., not all numbers within the range value of `float` can be represented exactly: 1/10 in base 2 would become a repeating 0.00011001100.... Therefore, when your input are as small as 1e-15, such errors become significant to the result and cause the difference from the actual derivative.
To solve this problem, you can use the `decimal` module of python which provides exactly represented decimal numbers. An example is as follows:

```python
from decimal import Decimal, getcontext

#set the precision of the decimal. Default is 28
getcontext().prec = 26

#Convert other variables to Decimal. However, float would bring in the precision problem
a = Decimal("1.2375")  #Decimal('1.2375')
b = Decimal(1)/Decimal(7) #Decimal('0.14285714285714285714285714')
c = Decimal(6.325) #Decimal('6.32500000000000017763568394')
```