先來看乙個錯誤:if(
get_uint32_from_tlv_chain
(ptlvlist,31
,&dwbasescore
)<0)
if(get_uint32_from_tlv_chain
(ptlvlist,6
,&dwbestansuid1
)<0)
if(get_uint32_from_tlv_chain
(ptlvlist,7
,&dwbestansuid2
)<0)
if(get_uint32_from_tlv_chain
(ptlvlist,8
,&dwreason
)<0)
fbasescore=*
(float*)(
&dwbasescore
); 這是乙個實際生產環境下的**,通過tlv傳輸了乙個uint32的值,然後將位址轉化為float *,這樣得到的結果是錯的。這個跟浮點數的編碼有關,具體原因參見
一般來說在通訊協議中傳輸浮點數的需求不多,也盡量避免。如果有,那怎麼辦?這裡提供乙個做法。
static void writedouble(pyobject* outbuf, double dub) transfer;
transfer.f = dub;
writei64(outbuf, transfer.t);
}static double readdouble(decodebuffer* input) transfer;
transfer.f = readi64(input);
if (transfer.f == -1)
return transfer.t;
}這是摘自thrift binary protocol的一段**,這裡使用的技巧很容易看明白。
對於float的也可以這麼做。
如何在shell中對浮點數進行計算
在shell中具有最基本的數學計算能力,如可以使用expr let 但這些都只能處理整形資料。為了要計算小數,就需要通過bc命令擴充套件。下面演示了乙個例子,判斷輸出的引數型別,然後計算出它的平方.bin sh filename testbc var 1 dd echo var bc 2 dev n...
浮點數如何在計算機中表示
浮點數如何在計算機中表示 乾坤有數 根據ieee 754標準,浮點數的表示形式如下 其中,s為數的符號位,為0時表示正數,為1時表示負數 p為階碼,通常用移碼表示 m為尾數,用原碼表示。目前,計算機中主要使用三種形式的ieee 754浮點數,如下表所示 在ieee 754標準中,約定小數點左邊隱含有...
浮點數在計算機中如何儲存
浮點型變數在計算機記憶體中占用4位元組 byte 即32 bit。遵循ieee 754格式標準。乙個浮點數由2部分組成 底數m 和 指數e。mantissa 2exponent 注意,公式中的mantissa 和 exponent使用二進位制表示 底數部分 使用 進製數來表示此浮點數的實際值。指數部...