ошибка в std::complex (msvc 2013)
От: andyp  
Дата: 25.05.15 08:30
Оценка:
Нашел тут ошибку в реализации функции proj (https://connect.microsoft.com/VisualStudio/feedback/details/1364670)

        // TEMPLATE FUNCTION proj
_TMPLT(_Ty) inline
    _CMPLX(_Ty) proj(const _CMPLX(_Ty)& _Left)
    {    // return complex projection
    return (_CMPLX(_Ty)(
        _CTR(_Ty)::_Isinf(real(_Left)) || _CTR(_Ty)::_Isinf(real(_Left))
            ? _CTR(_Ty)::_Infv(real(_Left)) : real(_Left),
        imag(_Left) < 0 ? -(_Ty)0 : (_Ty)0));
    }


Должно быть что-то навроде

        // TEMPLATE FUNCTION proj
_TMPLT(_Ty) inline
    _CMPLX(_Ty) proj(const _CMPLX(_Ty)& _Left)
    {    // return complex projection

        if (_CTR(_Ty)::_Isinf(real(_Left)) || _CTR(_Ty)::_Isinf(imag(_Left)))
            return _CMPLX(_Ty)(_CTR(_Ty)::_Infv(real(_Left)),
            imag(_Left) < 0 ? -(_Ty)0 : (_Ty)0);
        else
            return _Left;
    }


Кстати, та же самая функция сломана и в gcc, если не определено _GLIBCXX_USE_C99_COMPLEX
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61761

Это судьба.
Отредактировано 25.05.2015 9:04 andyp . Предыдущая версия . Еще …
Отредактировано 25.05.2015 9:00 andyp . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.