D.gnu - std.math.pow produces incorrect results when used with std.parallelism
- finalpatch (24/24) Jun 01 2013 the following code compiled with GDC shows the bug
- Johannes Pfau (5/35) Jun 02 2013 Please file a bug report on bugzilla.gdcproject.org
- finalpatch (4/10) Jun 02 2013 Bug reported as #58
the following code compiled with GDC shows the bug (I'm using the gcc 4.8 windows mingw32 version from https://bitbucket.org/goshawk/gdc/downloads) import std.math; import std.stdio; import std.range; import std.parallelism; void main() { enum n = 1000; float step = 1.0f/n; float[n] results_singlethreaded; float[n] results_multithreaded; foreach(i; iota(n)) results_singlethreaded[i] = pow(step * i, 0.4545f); foreach(i; parallel(iota(n))) results_multithreaded[i] = pow(step * i, 0.4545f); foreach(i; iota(n)) assert(results_singlethreaded[i] == results_multithreaded[i]); } ~/Desktop $ ./test.exe core.exception.AssertError test.d(26): Assertion failure The same code passes without assertion when compiled with DMD.
Jun 01 2013
Am Sun, 02 Jun 2013 07:17:12 +0200 schrieb "finalpatch" <fengli gmail.com>:the following code compiled with GDC shows the bug (I'm using the gcc 4.8 windows mingw32 version from https://bitbucket.org/goshawk/gdc/downloads) import std.math; import std.stdio; import std.range; import std.parallelism; void main() { enum n = 1000; float step = 1.0f/n; float[n] results_singlethreaded; float[n] results_multithreaded; foreach(i; iota(n)) results_singlethreaded[i] = pow(step * i, 0.4545f); foreach(i; parallel(iota(n))) results_multithreaded[i] = pow(step * i, 0.4545f); foreach(i; iota(n)) assert(results_singlethreaded[i] == results_multithreaded[i]); } ~/Desktop $ ./test.exe core.exception.AssertError test.d(26): Assertion failure The same code passes without assertion when compiled with DMD.Please file a bug report on bugzilla.gdcproject.org I can't reproduce this on linux/posix. Could you use feqrel to check the number of equal bits of the single/multithreaded results?
Jun 02 2013
http://bugzilla.gdcproject.org/show_bug.cgi?id=58 I have added the output from feqrel to the report. On Sunday, 2 June 2013 at 08:28:42 UTC, Johannes Pfau wrote:The same code passes without assertion when compiled with DMD.Please file a bug report on bugzilla.gdcproject.org I can't reproduce this on linux/posix. Could you use feqrel to check the number of equal bits of the single/multithreaded results?
Jun 02 2013