与其他电子表格一样,Excel 的精度为 15 位有效数字。因此,此公式:
=1/3
确实返回的是这个:
0.333333333333333
您可以看到,如果您将单元格格式化为显示超过 15 位小数。
因此,Excel 中的 1/3 几乎等于 1/3,这是我们在 15 位有效数字中所能得到的最接近的结果。“有效数字”是从第一个非零数字到最后一个非零数字的位数,与小数点在哪里无关。
因此,尽管 1000^(1/3) 是 10,但此公式:
=1000^(0.333333333333333)
返回此:
9.99999999999998
通常,您得到的 9 的数量几乎与您提供的 3 的数量一样多(有时一样多)。到目前为止,考虑到 15 位有效数字的精度限制,这一切都是意料之中的。
但是如果你输入这个公式:
=1000^(1/3)
您得到的结果恰好是 10。即使您更改数字格式以显示最大可能的 30 位小数,即使您选择公式并按 F9 在公式栏中对其进行评估,它也会返回恰好 10。
Excel 如何从中得出精确的 10?当幂运算符 ("^") 到达公式中的“1/3”时,它实际上并不是精确的 1/3;那时它实际上是 0.333333333333333。
更新:
好的,我想我知道如何才能让 Excel 获得精确的结果 10,而无需进行任何特殊处理。
首先,Excel 有一个 n 次方根算法,=1000^(1/3) 将通过该算法发送以得到 1000 的立方根。
(FWIW,像 =1000^(2/3) 这样的公式可以分为两个问题——1000 的平方,然后计算该结果的立方根,或者 1000 的立方根,然后计算该结果的平方。)
根据 Excel 的正常计算规则,首先会将 1/3 计算为 0.3333333333333333。然后,将 0.3333333333333333 取反并送入 n 次方根算法。
但是当 Excel 得到 0.333333333333333 的倒数时会发生什么?我们得到的结果是 3,因为 1/0.3333333333333333 = 3.000000000000003,而 Excel 的精度为 15 位有效数字,因此 3.00000000000003 会被截断为 3.00000000000000,或者正好是 3。
因此,Excel 的 n 次方根算法要求求 1000 的立方根。不是 3.000000000000003 的立方根,而是精确的立方根。答案当然是 10。
我查看了 Excel 对所有小于 150 的整数的倒数的倒数的操作。我首先得到倒数,然后复制/粘贴值以确保 Excel 对倒数的倒数做了任何特殊处理,然后得到了倒数值的倒数。例如:
- =1/3
- 复制/粘贴值以获取值 0.333333333333333
- =1/0.333333333333333
- 结果:正好是 3。
所有结果都与原始整数完全相同。没有一个结果像 37.9999999999999 或 38.0000000000001 这样。
因此,这似乎解释了为什么 =1000^(1/3) 的结果正好是 3。不需要特殊处理。只是当 Excel 获取 1/3 的倒数以得到 1000 的立方根时,结果正好是 3。大多数或所有类似示例可能都是如此。
另一方面,这并不能解释为什么 =1000^(0.333333333333333) 返回 9.99999999999998 而不是 10。这似乎与我们看到 Excel 对 1/0.33333333333333 的操作相矛盾。
答案1
Excel 要做什么才能从中得到准确的 10?
Excel 执行与使用 POWER(Value, Exponent) 时相同的计算,以计算您的=number^exponent
方程式
可以通过以下方式确认
- `=1000^(1/3),即 10
=1000000^(1/3)
即 100=1000000^(1/2)
即 1000=100^(1/2)
也就是 10。
匹配
=POWER(1000,1/3)
= 10=POWER(1000000,1/3)
= 100=POWER(1000000,1/2)
= 1000=POWER(100,1/2)
= 10
我取随机指数1/5
和5
,并验证了行为。
=10^(1/5)
并且=POWER(10,1/5)
结果都是1.584893192
=10^5 and
=电源(10,5)both come out to
100000`
我很感激BrianC 的帮助我指明正确的方向。
1000^(1/3) 与表示 1000 的立方根相同,即 10。Excel 可能遵循分数指数规则,在解释指数中的 1/3 时实际上并未进行任何计算。
值得指出的是,1/3
在 Excel 中,将任何值提高到 的指数,就是计算该数字的立方根的方法。在 Excel 中,将任何值提高到 的指数,1/2
就是计算该数字的平方根的方法。您也可以使用公式=SQRT(Value)
,但这样会得到与以下公式相同的结果=POWER(Value,Exponent)
Excel 立方根:x 的立方根是 x^(1/3)。A1 的立方根是:=A1^(1/3)。您也可以使用内置工作表函数 POWER:=POWER(A1;1/3)。要在 Excel 中计算立方根,请按照以下步骤操作:立方根公式 =POWER(E3,1/3)。让我们检查一下这个公式。125 的立方根。
我取了 2 到 16 之间的 10 个数字,并计算了所有 4 种组合。我添加了 SQRT 列,结果SQRT(2) == POWER(2,1/2) == 2^(1/2)
是相等的Excel 函数。
我可以理解 POWER 会检测到....但是它如何知道在没有特殊处理数百万种可能性的情况下做到这一点?
它可以以完全相同的方式处理每种情况。 它使用 came 代码来计算任意指数的值。
好的,但是它如何知道要对哪些输入数字执行此操作?通过特殊处理数百万种可能性?还是更有可能遵循某些规则或规则集?
它使用 came 代码来计算任意指数的值。
POWER 到底在做什么,竟然将 1/3 视为真分数?Excel 将操作数发送给 CPU,以二进制进行数学运算,我们当然不是说 CPU 正在以 10 为基数对真分数进行数学运算吧?!?!?
二进制和十进制用于帮助人类。CPU 以二进制执行所有操作。任何指数计算如何转换为 x86 都是明确定义的。
我认为 CPU 没有能力对十进制分数 1/3 进行计算,但如果我错了,我会非常有兴趣了解这方面的信息。
我 20 年前使用的计算器能够进行带分数的指数计算。我无法告诉你 Excel 能做什么确切地进行这些计算。我可以告诉你,它最终将被转换成装配计算,这将是明确定义的行为。
Ramhound 的回答指出,Excel 将幂运算符(“^”)转换为幂函数
事实上恰恰相反。幂函数将转换为标准指数计算