在Racket中融合乘法加法

时间:2016-02-26 17:43:47

标签: racket ieee-754

是否可以在Racket中使用fused multiply-add

我正在尝试移植一些依赖于融合操作的单个舍入的数字代码,但是在几次搜索后没有找到任何方法在Racket中使用fma或类似的东西。

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用FFI

从C库中获取它
(require ffi/unsafe ffi/unsafe/define)
(define-ffi-definer define-libc #f)
(define-libc fma (_fun _double _double _double -> _double))
(fma 3.0 2.0 1.0)
;; => 7.0

这适用于Linux。在Windows上,您可能需要为define-ffi-definer提供不同的库。

您还可以使用_double*代替_double作为参数,自动将Racket的其他数字类型转换为双精度数。

如果性能至关重要,您可能需要编译器和/或运行时支持以避免FFI施加的开销。在这种情况下,您可能想询问Racket Users mailing list