有人可以举一个最简单的例子,当
Mathf.Approximately
给出 true 时?
尝试以下操作,但总是错误:
Debug.Log(Mathf.Approximately(0.0001f, 0.0f)); // False
Debug.Log(Mathf.Approximately(0.00000001f, 0.0f)); // False
Debug.Log(Mathf.Approximately(0.00000000000001f, 0.0f)); // False
文档说,如果它们“在一个非常小的值(epsilon)内”,那么它们是相等的。
Epsilon 被记录为“浮点可以具有不同于零的最小值”。
有多小?FloatMinNormal
或
FloatMinDenormal
取决于
IsFlushToZeroEnabled
,如您所见从源代码 约为 1e-38,远 比
0.00000000000001f
小。对于非零值,精确的计算取决于数字的数量级,
您可以查看源代码以获得精确的公式。
某些数字(例如 0.1)无法用浮点数精确地表示。这就是为什么 Approximately
比直接相等更有用。然而,这是一个复杂的话题,需要的不仅仅是一个简单的答案才能充分发展。如果您想了解更多信息,也许可以从这里开始:https://floating-point-gui.de/