當我做類似如下:四捨五入整數浮點朝0
long x1 = LONG_MAX;
float x2 = x1;
long x3 = x2;
我得到如下:
x1 = 2147483647
x2 = 2147483648
x3 = -2147483648
有什麼辦法走向做從X1舍入到X2 0(甚至簡單地朝向負無窮)?
當我做類似如下:四捨五入整數浮點朝0
long x1 = LONG_MAX;
float x2 = x1;
long x3 = x2;
我得到如下:
x1 = 2147483647
x2 = 2147483648
x3 = -2147483648
有什麼辦法走向做從X1舍入到X2 0(甚至簡單地朝向負無窮)?
這並不能解決您的問題,但是如果您使用double而不是float,那麼如果long爲32位,則這會起作用。
#include <limits.h>
#include <stdio.h>
int main() {
long x1 = LONG_MAX;
double x2 = x1;
long x3 = x2;
printf("x1 = %d\n", x1);
printf("x2 = %f\n", x2);
printf("x3 = %d\n", x3);
}
也許你對標準IEEE 754 rounding modes感興趣?
鏈接是libc;我不確定這是否會作爲語言本身的一部分進行標準化。
我想這會工作(未經測試):
#include <math.h>
int save_round_mode = fegetround();
fesetround (FE_TOWARDZERO);
/* do stuff here */
fesetround (save_round_mode);
這些功能實際上是C99標準的一部分,從頭文件'
你應該對IEEE-754信息讀取wikipedia for float。
如果2147483648轉換爲浮動,它會像
(1).0000...000 x 2 power 32 NOTICE there are twenty-three '0's after the point
,完美等於2147483648
然而,對於2147483647,這是不可能的店整數的「所有信息」。因此,它必須被轉換成相同的浮動爲2147483648
讓我們看看少浮最近2147483647,這是
(1).1111...111 x 2 power 31 NOTICE there are twenty-three '1's after the point
數爲2147483520,比2147483648更進一步從2147483647
所以你明白爲什麼它應該是2147483648.
=,=我的英語很差,直到現在我才知道你的想法......也許,你的意思是你想得到答案'2147483520'?那麼,舍入模式被提及爲小數部分,但不是整數部分。例如,1.6向0舍入爲1.0。 – Stan
傑伊發佈了一個正確的答案,然後刪除它... –