#include "string.h"
#include "math.h"
int main()
{
double result = (double)sqrt(2.3456F);
unsigned char data[8]; //holds the bytes of the result
memmove(data,&result,8);
for(int i=0;i<8;i++)
printf("%d\n",data[i]);
return 0;
}
上述相同的代碼將sqrt()結果轉換爲double,然後存儲在另一個雙變量中。這裏的數據保存了浮點數結果的二進制表示。在Visual C++ 6.0和Visual C++ 2010上運行時,相同的代碼給出了不同的結果。這是爲什麼?Visual Studio版本中的數學函數的問題
還有一件事是如果結果是浮點數,那麼Visual C++ 6.0和Visual C++ 2010會給出相同的結果值。
任何機構都可以解決這個問題嗎?
輸出與結果變量爲雙::
與結果可變數據::
[0] 196 'Ä'
[1] 12 ''
[2] 25 ''
[3] 254 'þ'
[4] 42 '*'
[5] 129 ''
[6] 248 'ø'
[7] 63 '?'
用Visual C++ 2010
數據的Visual C++ 6.0
字節表示: :
[0] 0 unsigned char
[1] 0 unsigned char
[2] 0 unsigned char
[3] 0 unsigned char
[4] 43 '+' unsigned char
[5] 129 '' unsigned char
[6] 248 'ø' unsigned char
[7] 63 '?' unsigned char
輸出與結果變量被浮子::
用Visual C++ 6.0
[0] 88 'X'
[1] 9 ' '
[2] 196 'Ä'
[3] 63 '?'
用Visual C++ 2010
我得到如以上對結果變量相同的二進制值。
這看起來像'C',不'C的精度版本++ '? – 2012-01-11 09:19:49
@Paul R:這仍然是有效的C++和編寫'int main()'在C++中比在C中更習慣於寫入'int main(void)'。 – Benoit 2012-01-11 09:23:46
你應該使用printf(「%hhu」)'來打印[unsigned chars](http://en.cppreference.com/w/cpp/io/c/fprintf)。 – Benoit 2012-01-11 09:26:24