pi
Python float ile tam olarak gösterilemez (platform C'nin double
tipiyle aynı ). En yakın temsil edilebilir yaklaşım kullanılır.
Kutumda kullanımdaki kesin tahminler (muhtemelen kutunuzdakiyle aynı):
>>> import math
>>> (math.pi / 2).as_integer_ratio()
(884279719003555, 562949953421312)
Bu oranın tanjantını bulmak için şimdi wxMaxima'ya geçeceğim:
(%i1) fpprec: 32;
(%o1) 32
(%i2) tan(bfloat(884279719003555) / 562949953421312);
(%o2) 1.6331239353195369755967737041529b16
Yani aslında sahip olduklarınızla aynı. Kullanılacak ikili yaklaşım pi/2
, matematiksel ("sonsuz kesinlik") değerinden biraz daha azdır pi/2
. Yani bunun yerine çok büyük bir teğet elde edersiniz infinity
. Hesaplanan tan()
gerçek giriş için uygundur!
Tam olarak aynı türden nedenlerle, ör.
>>> math.sin(math.pi)
1.2246467991473532e-16
0 döndürmez. Yaklaşım math.pi
biraz daha küçüktür pi
ve görüntülenen sonuç bu gerçek göz önüne alındığında doğrudur.
Math.pi'yi GÖRMENİN DİĞER YOLLARI
Kullanımdaki kesin tahmini görmenin birkaç yolu vardır:
>>> import math
>>> math.pi.as_integer_ratio()
(884279719003555, 281474976710656)
math.pi
bu oranın matematiksel ("sonsuz kesinlik") değerine tam olarak eşittir.
Veya onaltılık gösterimde tam bir kayan nokta olarak:
>>> math.pi.hex()
'0x1.921fb54442d18p+1'
Veya hemen hemen herkes tarafından en kolay anlaşılan şekilde:
>>> import decimal
>>> decimal.Decimal(math.pi)
Decimal('3.141592653589793115997963468544185161590576171875')
Hemen açık olmasa da, her sonlu ikili kayan nokta, sonlu bir ondalık kayan nokta olarak tam olarak gösterilebilir (tersi doğru değildir ; örneğin ondalık 0.1
, sonlu bir ikili kayan nokta olarak tam olarak gösterilemez)Decimal(some_float)
kurucu tam eşdeğeri üretir.
Aşağıda pi
, tam ondalık değerinin izlediği gerçek değer math.pi
ve üçüncü satırdaki düzeltme işareti, farklı oldukları ilk basamağı gösterir:
true 3.14159265358979323846264338327950288419716939937510...
math.pi 3.141592653589793115997963468544185161590576171875
^
math.pi
"hemen hemen tüm" kutularda aynıdır, çünkü neredeyse tüm kutular artık aynı ikili kayan nokta biçimini kullanır (IEEE 754 çift duyarlık). Bunu üzerine onaylayın için yukarıdaki yöntemlerden herhangi birini kullanabilirsiniz senin kutu veya kutu bir istisna ise kullanımda hassas yaklaşımının bulunması için.