gpt4 book ai didi

haskell - 如何在 Haskell 中获取给定数字之前/之后的 float ?

转载 作者:行者123 更新时间:2023-12-04 14:22:01 24 4
gpt4 key购买 nike

给定一个 FloatDouble ,我怎样才能得到下一个更大或更小的它?换句话说,我如何执行与 C++'s std::nextafter functions 等效的功能? ?例如,给定 0 :: Float , 我想得到 1.40129846432481707092372958328991613128026194187651577175706828388979108268586060148663818836212158203125e-45 (其中 show s 为 1.0e-45 )作为下一个较大的,并给出 1 :: Float , 我想得到 0.999999940395355224609375 (show s 为 0.99999994)作为下一个较小的值。如果可能的话,我想知道如何自己在 Haskell 中执行此操作,而不是仅使用第三方库执行此操作(我对 base 中的某些内容很好)或使用 FFI 调用该 C++功能。

最佳答案

您可以使用 succIEEE :: IEEE a => a -> a 函数,对于属于 IEEE 的类型typeclass ( Float , Double , CFloatCDouble 属于这个 typeclass) 计算下一个可表示的数字。或如文档中所述:

Return the next largest IEEE value (Infinity and NaN are unchanged).



例如:
Prelude Numeric.IEEE> succIEEE 0
5.0e-324
Prelude Numeric.IEEE> succIEEE 1
1.0000000000000002
Prelude Numeric.IEEE> succIEEE 0 :: Float
1.0e-45
Prelude Numeric.IEEE> succIEEE 1 :: Float
1.0000001
Prelude Numeric.IEEE> succIEEE (0 :: Float) == 1.40129846432481707092372958328991613128026194187651577175706828388979108268586060148663818836212158203125e-45
True

关于haskell - 如何在 Haskell 中获取给定数字之前/之后的 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58151469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com