Get Type Basic Information

Synopsis

Get some basic information about a plain old data (POD) type, in this case the float type.

Results

Output:

Min: 1.17549e-38
Max: 3.40282e+38
Zero: 0
ZeroValue: 0
Is -1 negative? 1
Is 1 negative? 0
One: 1
Epsilon: 1.19209e-07
Infinity: inf
Good

Code

Python

#!/usr/bin/env python

import itk

MyType = itk.F

print("Min: " + str(itk.NumericTraits[MyType].min()))
print("Max: " + str(itk.NumericTraits[MyType].max()))
print("ZeroValue: " + str(itk.NumericTraits[MyType].ZeroValue()))

print("Is -1 negative? " + str(itk.NumericTraits[MyType].IsNegative(-1)))

print("Is 1 negative? " + str(itk.NumericTraits[MyType].IsNegative(1)))

print("OneValue: " + str(itk.NumericTraits[MyType].OneValue()))

print("Epsilon: " + str(itk.NumericTraits[MyType].epsilon()))

print("Infinity: " + str(itk.NumericTraits[MyType].infinity()))

if 0 == itk.NumericTraits[MyType].infinity():
    print(" 0 == inf!")
    exit(1)
else:
    print("Good")
    exit(0)

C++

#include <iostream>
#include "itkNumericTraits.h"

int
main(int, char *[])
{
  using MyType = float;

  std::cout << "Min: " << itk::NumericTraits<MyType>::min() << std::endl;
  std::cout << "Max: " << itk::NumericTraits<MyType>::max() << std::endl;
  std::cout << "Zero: " << itk::NumericTraits<MyType>::Zero << std::endl;
  std::cout << "ZeroValue: " << itk::NumericTraits<MyType>::ZeroValue() << std::endl;

  std::cout << "Is -1 negative? " << itk::NumericTraits<MyType>::IsNegative(-1) << std::endl;

  std::cout << "Is 1 negative? " << itk::NumericTraits<MyType>::IsNegative(1) << std::endl;

  std::cout << "One: " << itk::NumericTraits<MyType>::One << std::endl;

  std::cout << "Epsilon: " << itk::NumericTraits<MyType>::epsilon() << std::endl;

  std::cout << "Infinity: " << itk::NumericTraits<MyType>::infinity() << std::endl;

  if (0 == itk::NumericTraits<MyType>::infinity())
  {
    std::cout << " 0 == inf!" << std::endl;
    return EXIT_FAILURE;
  }
  else
  {
    std::cout << "Good" << std::endl;
    return EXIT_SUCCESS;
  }
}

Classes demonstrated

template<typename T>
class NumericTraits : public std::numeric_limits<T>

Define additional traits for native types such as int or float.

Define numeric traits for std::vector.

NumericTraits is used to extend the traits associated with native types such as float, char, int, and so on. These traits are extensions of the standard numeric_limits defined by the C++ compilers. Some of the added traits include minimum and maximum value; accumulation type; etc.

We provide here a generic implementation based on creating types of std::vector whose components are the types of the

NumericTraits from the original std::vector components. This implementation require support for partial specializations, since it is based on the concept that: NumericTraits<std::vector< T > > is defined piecewise by std::vector< NumericTraits< T > >
ITK Sphinx Examples:

Template Parameters
  • T: Component type of std::vector

Note

The Zero(), One(), min() and max() methods here take references to a pixel as input. This is due to the fact that the length of the std::vector is not known until run-time. Since the most common use of Zero and One is for comparison purposes or initialization of sums etc, this might just as easily be re-written with a pixel passed in as a reference and the length is inferred from this pixel.

See

NumericTraits

See itk::NumericTraits for additional documentation.