float 和 double 中的小数位数是如何计算的?
How is the amount of decimal places in a float and a double calculated?
我对编程还很陌生,在大学里我们学习了不同类型的数字(整数、短整数、浮点数、双精度数)。 Float 和 double 是浮点数。通常,它们由一个符号 +/-、一个尾数和一个指数组成。每个部分占用一定数量的比特。
浮点数最多可以显示 7 位小数,最多可以显示 16 位。
公式是:
23·log10(2)=23·(log(2)/log(10))≈23·0.3≈7(浮点数小数位数)
52·0.3≈16(小数位数为双)
我知道23和52是尾数的位。但对数从何而来?这是如何计算小数位数的?
23位可以表示223个值。 N个十进制数字可以表示10N个值。
计算可以表示与 23 位相同的一组值的小数位数减少到求解等式中的 N:
223 = 10N
log(223) = log(10N)
23*log(2) = N*log(10)
N = 23*(log(2)/log(10))
当然,您不能有小数位或小数位,因此您必须根据结果的使用方式向上或向下舍入。
我对编程还很陌生,在大学里我们学习了不同类型的数字(整数、短整数、浮点数、双精度数)。 Float 和 double 是浮点数。通常,它们由一个符号 +/-、一个尾数和一个指数组成。每个部分占用一定数量的比特。 浮点数最多可以显示 7 位小数,最多可以显示 16 位。 公式是:
23·log10(2)=23·(log(2)/log(10))≈23·0.3≈7(浮点数小数位数)
52·0.3≈16(小数位数为双)
我知道23和52是尾数的位。但对数从何而来?这是如何计算小数位数的?
23位可以表示223个值。 N个十进制数字可以表示10N个值。
计算可以表示与 23 位相同的一组值的小数位数减少到求解等式中的 N:
223 = 10N
log(223) = log(10N)
23*log(2) = N*log(10)
N = 23*(log(2)/log(10))
当然,您不能有小数位或小数位,因此您必须根据结果的使用方式向上或向下舍入。