【问题标题】:sqrtf(6)*sqrtf(6) != 6 in xcodexcode 中的 sqrtf(6)*sqrtf(6) != 6
【发布时间】:2012-06-10 02:54:03
【问题描述】:

我正在尝试创建一个软件来显示两个向量之间的角度,当它等于 (1,1,2) 时它不起作用,因此这个向量的模数是 sqrtf(6),它很重要2.449490 应该是 2.44948974278318。

有没有办法提高这个操作的精度?

在我的软件的后续步骤中,我执行此操作:

float angle = acos(dot/(modulus1*modulus2));

如果模数 1 == 模数 2,则模数 1*模数 2 = 点,但某些值不会发生这种情况。

我希望我说清楚了。

提前致谢, 格鲁伯

【问题讨论】:

标签: objective-c macos xcode4 sqrt


【解决方案1】:

如果您想要更高的精度,可以使用double。但是请注意,浮点数上的== 操作永远不会像整数类型那样工作。使用 epsilon 调整细微差异。

【讨论】:

  • == 操作对浮点和整数类型的工作方式完全相同;当且仅当值相等时,它才返回 true。不同之处在于,程序员对所涉及的实际 的直觉常常是错误的,因为大多数人从不费心去真正理解浮点数。
  • @StephenCanon:这就是我的意思。但我想我会添加那个次要但重要的说明。
  • 这里的主要问题是 2.4494897 并且 Xcode 一直向我显示 2.449490... 我尝试了所有数据类型,但它也没有工作。非常感谢您的帮助。
  • @EltonGruber:你的意思是调试器显示你2.449490?那可能是一个错误。尝试好的 ol' printf-ing 精确值(并使用足够高的精度说明符)。现在,正如我之前所说,您可能需要使用一些 epsilon 来解释浮点表示不准确的事实。
  • @dirkgently 感谢您这么快回答...我正在尝试使用 NSLog(@"%Lf",var)。
猜你喜欢
  • 2013-06-03
  • 2011-10-16
  • 1970-01-01
  • 1970-01-01
  • 2015-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多