如何使用其最小/最大可能值(数字限制)初始化通用变量?

时间:2017-10-22 14:55:33

标签: nim

如何使用底层泛型类型的最小/最大可能值初始化泛型函数中的变量?我正在寻找Nim相当于C ++的std::numeric_limits

1 个答案:

答案 0 :(得分:2)

Nim不需要特殊的模块。一般模式是使用low(T)high(T)来获取类型T的最小/最大可能值。默认情况下,所有整数类型的函数都会重载。通过为它们实现lowhigh,它可以轻松扩展为浮点类型或任何其他类型。例如,以下代码适用于任何标准数字类型:

import typetraits # only required for priting the type name

proc high(T: typedesc[SomeReal]): T = Inf
proc low(T: typedesc[SomeReal]): T = NegInf

proc requiresNumericLimits[T]() =
  let minPossible = low(T)
  let maxPossible = high(T)
  echo "Min of type ", name(T), ": ", minPossible
  echo "Max of type ", name(T), ": ", maxPossible

requiresNumericLimits[int]()
requiresNumericLimits[int16]()
requiresNumericLimits[uint16]()
requiresNumericLimits[float32]()
requiresNumericLimits[float64]()

输出:

Min of type int: -9223372036854775808
Max of type int: 9223372036854775807
Min of type int16: -32768
Max of type int16: 32767
Min of type uint16: 0
Max of type uint16: 65535
Min of type float32: -inf
Max of type float32: inf
Min of type float64: -inf
Max of type float64: inf