|
Boost : |
From: Hubert Holin (Hubert.Holin_at_[hidden])
Date: 2007-04-28 20:10:09
Paris (U.E.), le 29/04/2007
Bonsoir
(Sorry, I did not have time to write the second part of my review,
and now it is too late... at least the most important part went in).
In article <4633B09B.50903_at_[hidden]>,
Jeff Garland <jeff_at_[hidden]> wrote:
[SNIP]
>
> 3) 64bit Linux, gcc 4.0 -- 2 Test failures (see below)
> a) special functions
[SNIP]
>
> Jeff
>
>
> ****************************************************************
> * Test failure output *
> ****************************************************************
> MkDir1 ../bin.v2
> MkDir1 ../bin.v2/test
> MkDir1 ../bin.v2/test/special functions test.test
> MkDir1 ../bin.v2/test/special functions test.test/gcc-4.0
> MkDir1 ../bin.v2/test/special functions test.test/gcc-4.0/debug
> gcc.compile.c++
> ../bin.v2/test/special functions test.test/gcc-4.0/debug/special functions
> test.o
> gcc.link
> ../bin.v2/test/special functions test.test/gcc-4.0/debug/special functions
> test
> testing.capture-output
> ../bin.v2/test/special functions test.test/gcc-4.0/debug/special functions
> test.run
> ====== BEGIN OUTPUT ======
> Results of special functions test.
>
> (C) Copyright Hubert Holin 2003-2005.
> Distributed under the Boost Software License, Version 1.0.
> (See accompanying file LICENSE 1 0.txt or copy at
> http://www.boost.org/LICENSE 1 0.txt)
>
> Running 21 test cases...
> Testing atanh in the real domain for float.
> Testing atanh in the real domain for double.
> Testing atanh in the real domain for long double.
> Testing asinh in the real domain for float.
> asinh test.hpp(56): error in "asinh test<f>": check ::std::less equal<T>()(
> asinh error evaluator(x), static cast<T>(4) ) failed for ( 44.7235527, 4 )
> asinh test.hpp(56): error in "asinh test<f>": check ::std::less equal<T>()(
> asinh error evaluator(x), static cast<T>(4) ) failed for ( 44.7235527, 4 )
> Testing asinh in the real domain for double.
> Testing asinh in the real domain for long double.
> Testing acosh in the real domain for float.
> Testing acosh in the real domain for double.
> Testing acosh in the real domain for long double.
> Testing sinc pi in the real domain for float.
> Testing sinc pi in the real domain for double.
> Testing sinc pi in the real domain for long double.
> Testing sinhc pi in the real domain for float.
> Testing sinhc pi in the real domain for double.
> Testing sinhc pi in the real domain for long double.
> Testing sinc pi in the complex domain for float.
> Testing sinc pi in the complex domain for double.
> Testing sinc pi in the complex domain for long double.
> Testing sinhc pi in the complex domain for float.
> Testing sinhc pi in the complex domain for double.
> Testing sinhc pi in the complex domain for long double.
>
> *** 2 failures detected in test suite "Master Test Suite"
[SNIP]
OK, these errors I know and hate. I am the culprit here. The
problem, as far as I could tell, boils down to a QOI issue on 64 bits
platforms, using Gcc: the implementation of transcendental functions for
64 bits behaves just like if it were a 32 bits value being passed. As
far as I know, this is legal (if horrendous) behavior. I still also find
the idea of not being able to use 64 bits floating point variables on
platforms that purport to support them (my platform of choice included)
abhorrent. Perhaps the only clean way out would be to re-implement these
basic functions ourselves, but that, of course, would be the source of
other problems (overriding part of the user's standard library).
Merci
Hubert Holin
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk