引言,今年是py加入全國計算機二級大禮包的第一年,看了幾道題,比如:
0.1+0.1==0.2 返回true
0.1+0.2==0.3返回false
都是0 1 二進位制惹的禍,真是一點不省油。。。。弄好久 累
對於十進位制,它只能表示以進製數的質因子為分母的分數。10 的質因子有 2 和 5。比如1/2、1/4、1/5、1/8和 1/10 都可以精確表示,因為這些分母只使用了10的質因子。相反,1/3、1/6 和 1/7 都是迴圈小數,因為它們的分母使用了質因子 3 或者 7。二進位制下(進製數為2),只有乙個質因子,即2。因此你只能精確表示分母質因子是2的分數。二進位制中,1/2、1/4 和 1/8 都可以被精確表示。但是,1/5 或者 1/10 就變成了迴圈小數。所以,在十進位制中能夠精確表示的 0.1 與 0.2(1/10 與 1/5),到了計算機所使用的二進位制數值系統中,就變成了迴圈小數。當你對這些迴圈小數進行數**算時,並將二進位制資料轉換**類可讀的十進位制資料時,會 對小數尾部進行截斷處理。
不同語言執行0.1+0.2 可以見0.1+0.2在各種語言中的結果
回歸正題,博主在numpy中求乙個整數矩陣a 的逆矩陣 結果a-1是float型, a點積a-1的結果也是浮點型,並不是好看的對角為1的矩陣
在此可以在初始設定
numpy.set_printoptions(suppress=true)
%設定suppress是不使用科學計數
%括號裡也可以是precision=位數,小數的位數
例子
import numpy as np
from numpy.linalg import inv,qr
a=np.array([[0,1,2],[1,1,4],[2,-1,3]])%線性代數書上乙個例子
inv(a)%求逆矩陣
out[26]:
array([[-7., 5., -2.],
[-5., 4., -2.],
[ 3., -2., 1.]])
np.dot(a,inv(a))
out[28]:
array([[1.00000000e+00, 0.00000000e+00, 0.00000000e+00],
[0.00000000e+00, 1.00000000e+00, 4.44089210e-16],
[8.88178420e-16, 2.22044605e-16, 1.00000000e+00]])
%本應該是對角1矩陣的
np.set_printoptions(suppress=true)
np.dot(a,inv(a))
out[32]:
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
%現在就和py資料分析第二版裡面的顯示一樣了
浮點數精度問題
一 例子 首先我們去編譯器試試 double a 1.9 通過新增監視檢視a的值 會發現a的值是1.8999999 二 開始今天的學習 在最開始學c 的時候並沒有對浮點數進行很深入的學習,認為浮點不就是小數嘛,首先在c 的巨集裡面有 flt max 和 flt min 的定義,float是四位元組的...
浮點數的精度問題
float 1bit 符號位 8bits 指數字 23bits 尾數字 double 1bit 符號位 11bits 指數字 52bits 尾數字 對於二進位制的小數 1.1 1 20 1 2 1 1 1 2 1.5 1.01 1 20 0 2 1 1 2 2 1 1 4 1.25 1.0011 1...
浮點數精度丟失問題
c 中的浮點數,分單精度 float 和雙精度 double float 是 system.single 的別名,介於 3.402823e38 和 3.402823e38 之間的32位數字,符合二進位制浮點演算法的 iec 60559 1989 ieee 754 標準 double 是 system...