gcc/libstdc++-v3/include/ext
Alexandre Oliva c787deb012 skip Cholesky decomposition in is>>n_mv_dist
normal_mv_distribution maintains the variance-covariance matrix param
in Cholesky-decomposed form.  Existing param_type constructors, when
taking a full or lower-triangle varcov matrix, perform Cholesky
decomposition to convert it to the internal representation.  This
internal representation is visible both in the varcov() result, and in
the streamed-out representation of a normal_mv_distribution object.

The problem is that when that representation is streamed back in, the
read-back decomposed varcov matrix is used as a lower-triangle
non-decomposed varcov matrix, and it undergoes Cholesky decomposition
again.  So, each cycle of stream-out/stream-in changes the varcov
matrix to its "square root", instead of restoring the original
params.

This patch includes Corentin's changes that introduce verification in
testsuite/ext/random/normal_mv_distribution/operators/serialize.cc and
other similar tests that the object read back in compares equal to the
written-out object: the modified tests pass only if (u == v).

This patch also fixes the error exposed by his change, introducing an
alternate private constructor for param_type, used only by operator>>.


for  libstdc++-v3/ChangeLog

	* include/ext/random
	(normal_mv_distribution::param_type::param_type): New private
	ctor taking a decomposed varcov matrix, for use by...
	(operator>>): ... this, befriended.
	* include/ext/random.tcc (operator>>): Use it.
	(normal_mv_distribution::param_type::_M_init_lower): Adjust
	member function name in exception message.

for  libstdc++-v3/ChangeLog
from  Corentin Gay  <gay@adacore.com>

	* testsuite/ext/random/beta_distribution/operators/serialize.cc,
	testsuite/ext/random/hypergeometric_distribution/operators/serialize.cc,
	testsuite/ext/random/normal_mv_distribution/operators/serialize.cc,
	testsuite/ext/random/triangular_distribution/operators/serialize.cc,
	testsuite/ext/random/von_mises_distribution/operators/serialize.cc:
	Add call to `VERIFY`.

From-SVN: r274233
2019-08-09 09:20:58 +00:00
..
pb_ds
algorithm
aligned_buffer.h
alloc_traits.h
atomicity.h Fix recent regression in __atomic_add_dispatch 2019-07-06 22:16:38 +01:00
bitmap_allocator.h Remove using-declarations that add std names to __gnu_cxx 2019-05-31 11:35:07 +01:00
cast.h
cmath
codecvt_specializations.h
concurrence.h
debug_allocator.h Remove using-declarations that add std names to __gnu_cxx 2019-05-31 11:35:07 +01:00
enc_filebuf.h
extptr_allocator.h
functional Remove using-declarations that add std names to __gnu_cxx 2019-05-31 11:35:07 +01:00
iterator
malloc_allocator.h Remove using-declarations that add std names to __gnu_cxx 2019-05-31 11:35:07 +01:00
memory Remove using-declarations that add std names to __gnu_cxx 2019-05-31 11:35:07 +01:00
mt_allocator.h Remove using-declarations that add std names to __gnu_cxx 2019-05-31 11:35:07 +01:00
new_allocator.h Remove using-declarations that add std names to __gnu_cxx 2019-05-31 11:35:07 +01:00
numeric Remove using-declarations that add std names to __gnu_cxx 2019-05-31 11:35:07 +01:00
numeric_traits.h
pod_char_traits.h
pointer.h
pool_allocator.h Remove using-declarations that add std names to __gnu_cxx 2019-05-31 11:35:07 +01:00
random skip Cholesky decomposition in is>>n_mv_dist 2019-08-09 09:20:58 +00:00
random.tcc skip Cholesky decomposition in is>>n_mv_dist 2019-08-09 09:20:58 +00:00
rb_tree Remove using-declarations that add std names to __gnu_cxx 2019-05-31 11:35:07 +01:00
rc_string_base.h
rope Remove using-declarations that add std names to __gnu_cxx 2019-05-31 11:35:07 +01:00
ropeimpl.h Remove using-declarations that add std names to __gnu_cxx 2019-05-31 11:35:07 +01:00
slist Remove using-declarations that add std names to __gnu_cxx 2019-05-31 11:35:07 +01:00
sso_string_base.h
stdio_filebuf.h
stdio_sync_filebuf.h
string_conversions.h
throw_allocator.h
type_traits.h
typelist.h
vstring.h
vstring.tcc
vstring_fwd.h
vstring_util.h