尝试理解Mathf。大约[重复]

问题描述 投票:0回答:1

有人可以举一个最简单的例子,当

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
c# unity-game-engine precision equality
1个回答
2
投票

文档说,如果它们“在一个非常小的值(epsilon)内”,那么它们是相等的。

Epsilon 被记录为“浮点可以具有不同于零的最小值”。

有多小?

FloatMinNormal

FloatMinDenormal
 取决于 
IsFlushToZeroEnabled
,如您所见 
从源代码 约为 1e-38,0.00000000000001f
 小。

对于非零值,精确的计算取决于数字的数量级,

您可以查看源代码以获得精确的公式

某些数字(例如 0.1)无法用浮点数

精确地表示。这就是为什么 Approximately

 比直接相等更有用。然而,这是一个复杂的话题,需要的不仅仅是一个简单的答案才能充分发展。如果您想了解更多信息,也许可以从这里开始:
https://floating-point-gui.de/

© www.soinside.com 2019 - 2024. All rights reserved.