Math.Pow()打破单声道ARM构建?

时间:2012-11-06 18:31:15

标签: mono arm pow

所以我在BeagleBone(ARM 700MHz处理器)上运行Ubuntu 12.04,我惊讶地发现Math.Pow()在该平台上返回错误的结果(Mono build 2.10.8.1ubuntu2.1) )。

经过一番搜索后,我发现this poster表示这是一个已知问题。几乎是随便的。我有点震惊a)问题首先出现了,b)没有ETA来修复我认为核心数学库中一个非常基本的错误。

进一步搜索只发现了一些点击,并没有在https://bugzilla.xamarin.com/上提及此事(我计划提交错误报告)。

所以,诚然没有进入源代码(虽然我计划),任何人都可以向我解释解决这个问题的困难,或者它是如何首先引入的?我的意思是,math.h中的pow()函数按预期工作,所以Math.Pow()不能包装吗?我在这里缺少什么?

我想我觉得浮点运算有些东西是我不理解的基础,所以这不仅仅是一个错误报告,我想知道基本问题是什么,或者它是否是只是一个被忽视的大问题。

编辑: 这个页面很好地总结了问题的根源(在debian中移植armhf的状态): http://wiki.debian.org/ArmHardFloatTodo

Punchline:单声道2.10被列为armhf端口不固定,但它正在进行单声道3.0。

1 个答案:

答案 0 :(得分:1)

有关问题的更详细背景: http://lists.debian.org/debian-arm/2012/02/msg00000.html

但作为总结 - armhf不是Mono的ABI支持,它的ARM端口是armel ABI。这意味着最终调用者和被调用者不同意函数调用中传递浮点参数的位置。

很少有东西“只改变2行代码”,而那些通常需要花费大量精力来追踪哪两行是错误的,以及他们应该做些什么。