[問題] VC2008 這問題不知道該算什麼問題...
問題是這樣的..... 我在寫某SDK時, 發生了 float 陣列卻像是 double 的怪事
float *workA; workA = new float [ some_size ];
memcpy(workA, someone_point, some_size*4 );
some_size*4 是因為 float 是 4byte (這樣寫沒錯吧)
實際上 workA 也在後續演算法裡正常工作中, 現在是因為要抓一個怪bug
所以要檢查 workA 的值這樣, 下面是發生的怪事....
============================
cout << workA[0]; <= 畫面上顯示 0.999969 (實際多少我不知道)
if (workA[0] == 0.999969) { something(); } <= false
cout << workA[0] - 0.999969; <= 4.82422e-007
printf( "%10f", workA[0]); <= 0.999969
printf( "%10f", workA[0]- 0.999969); <= 0.0000.... 又正常起來了
cout << workA[0] * 1000000; <= 99996.9
cout << workA[0] * 10000000; <= 999970 哪招啊
if (workA[0]*1000000 == 999970) { something(); } <= false
float TEST = 0.999969; <= compiler 警告: 這是 double 常數, 轉換成float會掉資料
============================
簡單來說 .......單精的浮點數變成倍精? (倍精部分的資料是存在哪邊啊.....)
有沒有人能解惑一下這種靈異現象....QQ 感謝
MS VC++ 2008 / XP SP3 32bit
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.132.126.29
※ 編輯: wahaha99 來自: 220.132.126.29 (08/05 21:00)
→
08/05 21:02, , 1F
08/05 21:02, 1F
→
08/05 21:03, , 2F
08/05 21:03, 2F
→
08/05 21:04, , 3F
08/05 21:04, 3F
→
08/05 21:11, , 4F
08/05 21:11, 4F
→
08/05 21:12, , 5F
08/05 21:12, 5F
→
08/05 21:12, , 6F
08/05 21:12, 6F
→
08/05 21:14, , 7F
08/05 21:14, 7F
→
08/05 21:15, , 8F
08/05 21:15, 8F
→
08/05 21:15, , 9F
08/05 21:15, 9F
推
08/05 22:02, , 10F
08/05 22:02, 10F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):