我想計算浮點數和雙精度的尾數位數。 我知道這些數字應該是23和52,但我必須在我的程序中計算它。如何計算尾數位數?
-1
A
回答
5
3
有一個在數目個尾數位的歧義:它可以是
- 來表示浮點值所需的位的數目。
- 存儲到浮點表示中的位數。
通常情況下,存儲在IEEE浮點格式中的尾數不包含初始的1
,它暗示所有規則的非零數字。因此表示中的位數比真實位數少一位。
你可以計算這個數字的二進制浮點格式,以不同的方式:
- 一些系統定義清單contants
FLT_MANT_BITS
,DBL_MANT_BITS
和LDBL_MANT_BITS
。該值是尾數位的真實數量。 - 可以從涉及
<float.h>
定義FLT_EPSILON
一個直接計算得到的比特數:FLT_EPSILON
是最小的浮點值,使得1.0f + FLT_EPSILON
是從1.0f
不同。尾數的真實數字是1 - log(FLT_EPSILON)/log(2)
。相同的公式可以用於其他浮點格式。 - 您可以使用循環計算值,如下面的代碼所示。
下面是測試工具:
#include <float.h>
#include <math.h>
#include <stdio.h>
int main(void) {
int n;
float f = 1.0;
for (n = 0; 1.0f + f != 1.0f; n++) {
f /= 2;
}
#ifdef FLT_MANT_BITS
printf("#define FLT_MANT_BITS %d\n", FLT_MANT_BITS);
#endif
#ifdef FLT_EPSILON
printf("1 - log(FLT_EPSILON)/log(2) = %g\n", 1 - log(FLT_EPSILON)/log(2));
#endif
printf("Mantissa bits for float: %d\n", n);
double d = 1.0;
for (n = 0; 1.0 + d != 1.0; n++) {
d /= 2;
}
#ifdef DBL_MANT_BITS
printf("#define DBL_MANT_BITS %d\n", DBL_MANT_BITS);
#endif
#ifdef DBL_EPSILON
printf("1 - log(DBL_EPSILON)/log(2) = %g\n", 1 - log(DBL_EPSILON)/log(2));
#endif
printf("Mantissa bits for double: %d\n", n);
long double ld = 1.0;
for (n = 0; 1.0 + ld != 1.0; n++) {
ld /= 2;
}
#ifdef LDBL_MANT_BITS
printf("#define LDBL_MANT_BITS %d\n", LDBL_MANT_BITS);
#endif
#ifdef LDBL_EPSILON
printf("1 - log(LDBL_EPSILON)/log(2) = %g\n", 1 - log(LDBL_EPSILON)/log(2));
#endif
printf("Mantissa bits for long double: %d\n", n);
return 0;
}
輸出我的筆記本電腦:
1 - log(FLT_EPSILON)/log(2) = 24
Mantissa bits for float: 24
1 - log(DBL_EPSILON)/log(2) = 53
Mantissa bits for double: 53
1 - log(LDBL_EPSILON)/log(2) = 64
Mantissa bits for long double: 64
相關問題
- 1. 如何計算中位數?
- 2. 如何計算小數位數?
- 3. 固有的以64位整數計算尾隨零位?
- 4. 如何從位置數據計算(計數)軌道數量?
- 5. 計算中位數
- 6. 計算中位數
- 7. 如何ggplot與預計算分位數?
- 8. 如何計算變量的中位數?
- 9. 如何計算int值中的位數?
- 10. 如何計算4位數的gcd?
- 11. 你如何計算int中的位數?
- 12. 如何計算AWS Redshift的中位數?
- 13. 計算字符的位數和位數
- 14. 按位計算和計數數之後
- 15. 如何計算各種百分位數的計數(*)
- 16. 計算機原理,大小尾數
- 17. 如何計算計數值?
- 18. 如何計算計數?
- 19. 如何計算浮點數的小數位數?
- 20. 如何使用數字數百萬位數進行計算?
- 21. 如何計算不同基數中數字的位數?
- 22. 百分位數計算器
- 23. 計算平均爲位數
- 24. 4位數字的計算
- 25. 百分位數計算
- 26. 百分位數計算
- 27. 計算複數的相位
- 28. 三位數運算計算器
- 29. 在matlab中計算科學數字的尾數和指數
- 30. 使用尾遞歸計算數字是偶數還是奇數
爲什麼你需要計算它在你的計劃? –
也許你可以開始[這裏](https://en.wikipedia.org/wiki/Floating_point) – Nard
@EdHeal粗略猜測,因爲這是OP的prof/TA所要求的。 –