3

因此,我在 BeagleBone(ARM 700MHz 处理器)上运行 Ubuntu 12.04,令我惊讶的是,我发现 Math.Pow() 在该平台上返回了不正确的结果(Mono build 2.10.8.1ubuntu2.1)。

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

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

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

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

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

Punchline:Mono 2.10 被列为不固定用于 armhf 端口,但它正在用于 mono 3.0。

4

1 回答 1

1

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

但作为总结 - armhf 不是 Mono 的正确支持的 ABI,其 ARM 端口是为 armel ABI 制作的。这意味着您最终会导致调用者和被调用者在函数调用中传递浮点参数的位置存在分歧。

很少有事情是“只更改 2 行代码”,而那些通常需要大量努力才能找出哪两行是错误的,以及他们应该做什么。

于 2012-11-06T22:23:00.400 回答