[注意]通達(dá)信整數(shù)減法有時(shí)會(huì)算錯(cuò)! [通達(dá)信]
-
咨詢內(nèi)容:
兩個(gè)整數(shù)相減 20130625 - 19000000 ,結(jié)果應(yīng)該是1130625 ,可通達(dá)信算出來的卻是 1130624!
很簡(jiǎn)單的測(cè)試,自定義指標(biāo)
結(jié)果1:20130625 - 19000000;
結(jié)果2:20130708 - 19000000;
結(jié)果1是錯(cuò)誤的,而結(jié)果2又是對(duì)的。
目前在內(nèi)核5.85和5.83 我都發(fā)現(xiàn)了這樣的問題,通達(dá)信連最基礎(chǔ)的整數(shù)減法都能算錯(cuò),還有什么不能算錯(cuò)的?
看圖
此主題相關(guān)圖片如下345.jpg:
-
通達(dá)信技術(shù)部:
這個(gè)問題確實(shí)是個(gè)嚴(yán)重的問題。很顯然,它在內(nèi)部是把兩個(gè)整數(shù)估計(jì)用浮點(diǎn)數(shù)的方法來進(jìn)行計(jì)算了。
-
通達(dá)信客服:
是的。數(shù)據(jù)類型所限,不支持8位整數(shù)。
-
網(wǎng)友交流:
以下是引用vs9841在2013-7-16 16:30:00的發(fā)言:
這個(gè)問題確實(shí)是個(gè)嚴(yán)重的問題。很顯然,它在內(nèi)部是把兩個(gè)整數(shù)估計(jì)用浮點(diǎn)數(shù)的方法來進(jìn)行計(jì)算了。
確如樓主所言,將20130625存在float中再輸出就變成了20130624了。
一段c語言測(cè)試:
#include
#include
int main()
{
float a1 = 20130625 ;
printf("a1=%f\n",a1) ;
return 0;
}
- 網(wǎng)友交流: 官方到現(xiàn)在還沒有出來解決這個(gè)問題 。。那個(gè)float換成double就可以。C語言中這個(gè)float類型通常是32位,其中有8位用于表示指數(shù)部分和符號(hào)。24位用于表示其余部份,其中C保證至少小數(shù)點(diǎn)后6位有效,按照浮點(diǎn)數(shù)在內(nèi)存中表示方法。float類型轉(zhuǎn)換整數(shù)精度應(yīng)該是6+1 =7位,所以用float類型轉(zhuǎn)換8位整數(shù)會(huì)損失很多精度,至少損失一半的8位整數(shù)精度。所以說這個(gè)問題非常嚴(yán)重
有思路,想編寫各種指標(biāo)公式,程序化交易模型,選股公式,預(yù)警公式的朋友
可聯(lián)系技術(shù)人員 QQ: 1145508240 進(jìn)行 有償 編寫!(不貴!點(diǎn)擊查看價(jià)格!)
相關(guān)文章
-
沒有相關(guān)內(nèi)容