【问题标题】:How to calculate a^(1/n)?如何计算 a^(1/n)?
【发布时间】:2013-04-04 01:16:07
【问题描述】:

我正在尝试计算a^(1/n),其中^ 表示求幂。

但是,以下内容:

Math.pow(8, 1/3)

返回1.0,而不是返回2.0

这是为什么呢?

【问题讨论】:

  • 哇。可爱的。 :)
  • 虽然这个问题可以使用更好的描述,但我并不真正理解所有的反对意见。这对这里的大多数人来说可能是微不足道的,但是这种事情(需要浮点除法时的整数除法)是一个非常普遍的问题,尤其是在新开发人员中;这个问题肯定会对其他人有所帮助。
  • @Saggio - 是的,这对初学者来说是一个主要的绊脚石,甚至我们中的一些“专家”也会时不时地与它发生冲突(并且在这个问题上花费的时间比我们愿意承认的要多在我们弄清楚之前)。
  • 当然,这是一个骗子,但不是一个坏问题。初学者很难找到骗子。
  • 如果 1/3 不仅仅是一个示例,而是您专门使用的东西,那么您应该考虑使用 Math.cbrt 而不是 Math.pow

标签: java floating-point division exponentiation


【解决方案1】:

问题是1/3 使用integer (truncating) division,其结果为零。将您的代码更改为

Math.pow(8, 1./3);

.1. 转换为浮点文字。)

【讨论】:

  • 非常感谢。这对我来说似乎微不足道但很重要。
  • @GltknBtn:不客气。每个人都会在某个时候遇到这个问题。当除法是更复杂表达式的一部分时,就更不明显了,就像这里的情况。
【解决方案2】:

1/3 变为 0(因为 13 被视为 int 文字)。

所以你应该让这些文字浮动/双...

做:

Math.pow(8, 1f/3)

Math.pow(8, 1./3)

Math.pow(8, 1.0/3)

【讨论】:

    【解决方案3】:

    改用Math.pow(8, (1.0f / 3.0f))

    1 / 3 将进行整数除法,得到8 ^ 0 = 1

    【讨论】:

    • 对于等级新手来说是很直观的!
    • @HotLicks:如果是这样,这个问题就不存在了。
    • @LightnessRacesinOrbit - 什么问题?
    • @HotLicks:问题占用了您当前在互联网网络浏览器设备中访问的页面。
    • 通过编写1.0f / 3.0f,您有意选择数学值 1/3 的单精度近似值,而不是您可以使用 1.0 / 3.0 获得的双精度近似值。我没有 Java 编译器,但无法对其进行测试,我敢打赌差异是显而易见的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 2022-06-17
    • 1970-01-01
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多