当前位置: 首页 > 知识库问答 >
问题:

基于对数的解决方案计算大整数中不正确的位数

谢宸
2023-03-14

我还没有足够的信誉点来留下评论,但我看到过很多次,当人们(错误地)建议使用log10来计算正整数中的位数时。这对大数字来说是错误的!

long n = 99999999999999999L;

// correct answer: 17
int numberOfDigits = String.valueOf(n).length();

// incorrect answer: 18
int wrongNumberOfDigits = (int) (Math.log10(n) + 1); 
// also incorrect:
double wrongNumberOfDigits2 = Math.floor(Math.log10(n) + 1);

我想知道为什么。

获取整数中位数的方法?
获取数字上位数的最快方法?

共有1个答案

刘修能
2023-03-14

问题是9999999999999999999999在这种情况下不能精确地表示为(双精度)浮点值。当作为double参数传递给log10时,最接近的值是1.0e+17

log10(n)值也是如此:16.99999999999999995657...-可以表示的最接近的值是17

 类似资料:
  • 本文向大家介绍PHP中浮点数计算比较及取整不准确的解决方法,包括了PHP中浮点数计算比较及取整不准确的解决方法的使用技巧和注意事项,需要的朋友参考一下 浮点数计算结果比较 一则浮点数计算例子如下: 打印出的结果是:bool(false)。也就是说在这里 0.2+0.7 的计算结果与 0.9 并不相等,这显然是有违我们的常识的。 对此问题,PHP官方手册曾又说明:显然简单的十进制分数如 0.2 不能

  • 百度统计于2016年秋开放无埋点技术内测,经过一年多的测试与研发后 ,于2017年6月正式发布『可视化圈选1.0』版本,并得到了广大开发者的认可。随后统计团队将更多研发人力投入到了无埋点技术的突破及应用功能拓展上,并逐步形成了一套基本无埋点技术的更加智能、高效、专业的全链路数据解决方案。 该方案围绕开发者的数据全链接业务流程,从数据采集、数据分析到数据应用的各个环节切入,帮助企业真正实现数据驱动。

  • 所以,这不是关于如何计算数字中的数字。它是如何计算每一个有多少。说: 多少个0,多少个1等等,我想把它放到树形图中 那我该怎么做呢? 数组将是任意大小的,所以我想我可以循环通过它,对于每个新的int,检查每个数字,如果那么等。但不确定如何增加KV映射中的值。

  • 关于中位数的算法,有一点我不明白。这个算法的一个关键步骤是找到一个近似的中位数,根据维基百科,我们保证这个近似的中位数大于初始集元素的30%。 为了找到这个近似中位数,我们计算每组5个元素的中位数,将这些中位数聚集在一个新的集合中,然后重新计算中位数,直到获得的集合至少包含5个元素。在这种情况下,我们得到集合的中值。(如果我的解释不清楚,请参阅维基百科页面。) 但是,请考虑以下125个元素: 因此

  • 我试图通过记忆来解决“计数变化”的问题。 考虑下面的问题:我们可以用多少种不同的方式来换取1美元,半价、四分之一、二分硬币、五分硬币和五分硬币?更一般地说,我们可以编写一个函数来计算使用任何一组货币面额改变任何给定金额的方法的数量吗? 以及递归的直观解决方案。 使用n种硬币改变a的数量的方法数 除第一种硬币外,其他所有硬币都可以换成硬币的方法,加上 使用所有n种硬币改变较小数量a-d的方法的数量,

  • 令我惊讶的是,它通过了所有的测试用例。有人能给我解释一下这个逻辑吗?