给定一个double,需要找到总共有多少位数

cdi*_*run 4 c double digits

我有一个双倍,不一定是积极的,但通常.它可以是0.xxxx000或X.xxxx00000或XX.00000或0.xxx0xxx00000,最后在最后一个数字的右边全部为0.我需要跟踪有多少位数.我一直遇到麻烦,有什么帮助吗?这是C.

Dam*_*mon 6

双具有52个尾数位加上一个隐含的"1"比特,所以你应该能够键入-双关语双指针64位整数(获得原始比特转换成一个整数),=此用(1 << 52)-1,| =与(1 << 52)的结果.

log10将是十进制数字的数字.

虽然,我几乎倾向于说"采用jonsca的解决方案",因为它非常简单(在任何情况下,它都应该获得+1作为KISS).

  • 叹了......好吧,我最后一次尝试:1/2 ^ 52 = 0.00000000000000022204460492503131.(double)(0.00000000000000022204460492503131)= 0.00000000000000022204,和(double)(1.0 + 0.00000000000000022204460492503131)= 1.0000000000000002.IEEE 754 double可以代表15.955(+ 1)个十进制数字,不再有.无论有多少数字可能会或可能不会,即使在理论上也是如此.他们根本不在那里,双人没有他们.1.0000000000000002和1.0000000000000003之间的任何数字都是相同的. (2认同)

jon*_*sca 5

使用sprintf将其转换为字符串,并对数字进行任何计数/测试