Vc 0.7.0 Released

Added by Matthias Kretz over 6 years ago

Vc 0.7.0 is ready. This release has seen major polishing, making it more intuitive and portable than any previous Vc release.

The compiler support was greatly improved:
  • GCC from version 4.1 on can compile Vc
  • clang 3.2
  • ICC 13.x
  • MSVC 2010 and 2012 are nearly fully supported. Full support is targeted for Vc 0.7.1.

The trigonometric functions have been reworked, leading to much higher precision. This came at the cost of speed. Vc 0.8 will look at more improvements and compromises in this area.

A major feature in 0.7 is the way operators are implemented. The Vc types now follow the C/C++ standards much closer how types implicitly convert when two different types are used with an operator. Examples for builtin types:

int * unsigned int -> unsigned int
float * int -> float
float * double -> double

Vc was too picky before 0.7 and OTOH did some implicit conversions that could lead to unexpected results. For example int_v * float would lead to the float getting converted to int_v instead of the int_v getting converted to float_v and the float broadcast to another float_v. I.e. old behavior:

int_v * float_v      -> error
int_v * float        -> int_v
int_v * uint_v       -> error
int_v * unsigned int -> int_v
float_v * double     -> float_v

The new behavior is now consistent with the behavior of builtin types - or stricter because different vector sizes do not combine
int_v * float_v      -> float_v
int_v * float        -> float_v
int_v * uint_v       -> uint_v
int_v * unsigned int -> uint_v
float_v * double     -> error (correct would be double_v, but that can't work because float_v::Size != double_v::Size)