2009-09-14 83 views
0

我尝试我的手在谷歌编程挑战赛,有是一个使用双值的问题处理...浮点数

我有一个很难用C编码,总是莫名其妙地我的答案会从不同在某些情况下的实际答案...

我想知道的是,哪种语言具有最好的浮点实现和处理?

这已经发生了很多次,我觉得是时候换用更好的语言来处理漂浮物了。有任何想法吗?

回答

1

我想知道哪种语言具有最好的浮点实现和处理能力?

Fortran或汇编器;许多其他人没有标准化的机制来访问所有类型(80位实数等)和处理器舍入模式(通常也可用作C语言中的编译器扩展)。

但是,浮点不是无限精确的,多个精度值可能需要无限的空间来表示某些值。

一些表达另一种方法是计划或支持有理数其他口齿不清家庭语言 - 所以1/3被存储整数1和整数3

如果你使用比较的结果表示那么您应该阅读Java规范并设置您的C环境以使用相同的舍入模式和算法; java.lang.Math trig函数基于netlib而不是C标准库。

还记得(你应该在学校教过什么),如果你的输入只给予一定数量的有效数字,不要将结果报告给比你更有意义的数字。

4

IEEE 754指定了关于浮点数的“你需要知道的一切”。这不是你使用的编程语言,也不是涉及的编译器/硬件。

如果你想精确非整数,你需要使用一个十进制类如由.NETPythonJava提供,例如。

+3

十进制类型不比常规浮点型更精确,只不过它们在用十进制表示分数时恰好是精确的。这是一个UI的问题。 – SingleNegationElimination 2009-09-14 06:50:51

3

几乎所有语言的fp都委托给硬件。做浮点计算是昂贵的,但是很有用,所以现代处理器几乎都有一些内置逻辑来进行这些计算。用这种语言来重塑这个特殊的车轮是非常愚蠢的。

这就是说,有几件事你可以做,取决于你想要什么你的FP计算。如果您需要双精度硬件通常可用的更高精度,则可以使用一些重新发明方向的库,可能是因为您必须解决一个特别恶劣的条件系统方程组,例如GMP提供了许多具有任意精度的数字格式。这将比硬件FP慢大约一个数量级,但也许你需要。

如果您遇到1.0/10.0 == 10.000000002问题,可能是因为您试图操纵货币,那么您需要以不同的方式进行计算,例如许多语言只提供一个特殊的数字类以大多数会计师所期望的方式使用十进制数字。你也可以使用上面提到的bignum库。

如果您需要更多的计算资源,现代GPU的配备了数十或数百个fp核心,现在提供了一些非常方便的API来访问它们。你可能想看看OpenCL,它为这种解决方案提供了一个可移植的抽象。