android 端 大型浮點數的儲存方案

2021-08-21 12:22:28 字數 629 閱讀 4754

在做人臉識別本地化方案是,遇到個資料儲存的問題。

提取到的特徵值是乙個512 為的float陣列,大小為512*4 = 2k

如果轉換成字串進行儲存,則資料大小為 512*1*32=16k 放大了8倍。

如果有500條資料的話,就是16*500 = 8m。常見的方式是資料庫或者sp,檔案

第一,sqlite3最長儲存4000個字元,資料庫無法儲存。

第一,如果存成sp或者檔案,讀取資料的耗時驚人,儲存成sp或者檔案都不現實,而且sp檔案還會拖慢整體速度。

因而,調研了很長時間,找到一種儲存方案。blob,sqlite3開始支援儲存blob檔案。

核心**就是將512浮點數轉換成bytes陣列,再轉換回來。**如下:

public static byte fromfloattobytes(float feat) 

return byteret;

}public static float frombytestofloat(byte array)

return floatret;

}

然後就是將bytes陣列存入資料庫。我使用的litepal定義byte資料進行儲存的,當然,使用greendao或者自己寫也是可以的。

浮點數的儲存以及 浮點數的比較

浮點數的儲存採用的是近似的原理 float儲存格式為 s e m 1位符號位 8位指數 23位尾數 轉成數值即為 v 1 s 1.m 2 e 127 對於16.5轉成二進位制為00010000.1 1.00001 2 4,那麼在記憶體的表示為 符號位 指數4 127 131 尾數 0 1000001...

浮點數的儲存

浮點數在計算機中的儲存格式 符號位 指數字 尾數字 符號位 指數字 尾數字 float 1位 8位 23位 共32位 double 1位 11位 52位 共64位 任何浮點數都可表示為 1.m 2e 符號位 sign 表示式中的 0表示正數,1表示負數。指數字 exponent 表示式中的e,指數字...

浮點數的比較

浮點數的比較 在數 算當中經常會涉及到判斷兩個數是否相等的情況 對於整數很好處理 a b這樣的乙個語句就可以解決全部的問題 但是對於浮點數是不同的 首先,浮點數在計算機當中的二進位制表達方式就決定了大多數浮點數都是無法精確的表達的 現在的計算機大部分都是數字計算機,不是模擬機,數字機的離散化的資料表...