Visual Studio Code C # Intellisense не работает

Существует три «официальных» способа: макрос posix isnan, c ++ 0x isnan или визуальная функция c ++ _isnan.

К сожалению, нецелесообразно обнаруживать, какая из те, которые будут использоваться.

И, к сожалению, нет надежного способа определить, есть ли у вас представление IEEE 754 с NaN. Стандартная библиотека предлагает такой официальный способ (numeric_limits<double>::is_iec559). Но на практике компиляторы, такие как g ++, закручивают это.

В теории можно было бы просто использовать x != x, но компиляторы, такие как g ++ и визуальный c ++-винт, вверху.

Итак, в end, протестировать конкретные битпаттеры NaN, предполагая (и, надеюсь, в какой-то момент применение) конкретное представление, такое как IEEE 754.


EDIT: в качестве примера «компиляторы, такие как g ++ и hellip , закрутите это вверх ", рассмотрите

#include <limits>
#include <assert.h>

void foo( double a, double b )
{
    assert( a != b );
}

int main()
{
    typedef std::numeric_limits<double> Info;
    double const nan1 = Info::quiet_NaN();
    double const nan2 = Info::quiet_NaN();
    foo( nan1, nan2 );
}

Компиляция с g ++ (TDM-2 mingw32) 4.4.1:

C:\test> type "C:\Program Files\@commands\gnuc.bat"
@rem -finput-charset=windows-1252
@g++ -O -pedantic -std=c++98 -Wall -Wwrite-strings %* -Wno-long-long

C:\test> gnuc x.cpp

C:\test> a && echo works... || echo !failed
works...

C:\test> gnuc x.cpp --fast-math

C:\test> a && echo works... || echo !failed
Assertion failed: a != b, file x.cpp, line 6

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
!failed

C:\test> _
1
задан M.Chappell 16 January 2019 в 15:11
поделиться