【发布时间】:2013-02-23 08:06:32
【问题描述】:
我正在寻找能够表示值 0.213123 或 0.0 或 1.0 的数值类型,但拒绝超出范围的值,例如 -0.2123 和 1.2312。是否存在适合该目的的特定类型,将数字限制在特定范围内的最佳通用方法是什么?
当然,想到的第一个答案是:只使用Double,但是被 Haskell 的类型系统宠坏了,我已经习惯了在类型级别上最大限度地保护程序。
【问题讨论】:
-
@TTT 在 SO 上,相关标签隐含的语言参考是惯例。所以,是的。
-
你看过这个吗(它没有给你静态类型检查,但在定义模块之外,不可能有无效值)? stackoverflow.com/questions/4557394/…
-
这个数据类型需要支持哪些操作?
-
@NikitaVolkov 如果您不需要支持任何操作,那么
data NumberBetweenZeroAndOne = NumberBetweenZeroAndOne支持您需要的所有功能,并且无需实际存储 [0,1] 中的数字以进行引导。但大概这不足以满足您的目的。您需要此数据类型支持哪些操作? -
“最佳”是指“惯用的”,还是您真的有兴趣在最大限度地提高精度的同时最大限度地减少开销?
标签: haskell types floating-point numbers