станд.:: isfinite на MSVC

C++ 11 и стандарт C11 определяет станд.:: isfiniteфункция. Visual Studio 2012, кажется, не обеспечивает его как часть cmath или math.h , но имеет amp_math.h который кажется, обеспечивает эту функцию.

isfinite взаимозаменяемый станд.:: isfinite ? документация не говорит о поведении, когда названо с NAN и я не имею ПРОТИВ компилятора, чтобы проверить это.

10
nl ja de

2 ответы

Как уже указал Мариус , isfinite из amp_math.h должен использоваться в УСИЛИТЕЛЕ C++, который является MS расширение для параллельных вычислений на много-базовой архитектуре, подобной CUDA или OpenCL. И так как эта функция может только использоваться в ограниченных функциях фактического УСИЛИТЕЛЯ (обычно ядра GPU), она не будет иметь большого общего применения для вас.

Unfortunately VS 2012 doesn't support the C++11 math and floating point control functions. But once you recognize that you are on VC and implement special code for it, you can just use _finite (or rather !_finite) from , which is an MS-secific function supported since at least VS 2003. But keep in mind that _finite only takes doubles and thus converts any non-double arguments (though VC doesn't seem to have a proper long double anyway), with all its implications (while INFs and quiet NaNs should be converted without problem, I'm not sure if the trapping on a signalling NaN in the conversion would also have resulted from a direct call to std::finite).

VC's standard library has other such functions to accomodate for their lack of C++11/C99 support (like _isnan and the like). (Why they refuse to just remove that underscore in front of those functions and put a simple wrapper around _controlfp and thus get a bit nearer to complete C++11 support is a totally different question though.)

EDIT: Other than that, the straight-forward approach for checking INFs and NaNs might also work:

template bool isfinite(T arg)
{
    return arg == arg && 
           arg != std::numeric_limits::infinity() &&
           arg != -std::numeric_limits::infinity();
}

Но конечно с теми же самыми последствиями вероятного заманивания в ловушку для передачи сигналов <о коде> NaN s (хотя я должен признать, что я не то, что сведущий в запутанности сигнальных NaN s и исключения в операции с плавающей запятой в целом).

16
добавлено
@patrickvacek Правда, все же Visual Studio doesn' у t есть разумная поддержка C так или иначе. Я вижу, что ответ только обращается к части C++ вопроса, все же OP, кажется, знает оба языка и должен таким образом быть в состоянии вывести версию C ответа при необходимости.
добавлено автор Christian Rau, источник
Хорошо, это - действительно головная боль, чтобы сделать меня просто использовать boost.org/doc/libs/1_52_0/libs/math/doc/sf_and_dist/html/…
добавлено автор pmr, источник
Возможно, это обошлось без помощи высказывания, но ваш isfinite функция в вашем редактировала является очень C++ - конкретный.
добавлено автор patrickvacek, источник

isfinite from amp_math.h can only be called from functions marked with restrict(amp), which doesn't make it interchangeable, even if the behavior was the same.

5
добавлено
Ваш ответ - пятно на, но христианский Rau' s разработки на альтернативных возможностях делают его лучшим ответом. Мой underspecified вопрос виновным, не ваш ответ.
добавлено автор pmr, источник
pro.cxx
pro.cxx
3 049 участник(ов)

C/C++ chat 0. Простые вопросы, лабы и о IDE — в чат новичков @supapro 1. Не хамим, не переходим на личности, не вбрасываем утверждения без доказательств 2. No Ads, offtop, flood Объявления о вакансиях и евенты - в лс @AlexFails https://t.me/ProCxx/259155

supapro.cxx
supapro.cxx
1 925 участник(ов)

Чат для тех, кто немного знает C++, простые вопросы по реализации, синтаксису и ide – сюда, а для другого есть: /Главный чат по серьезным вопросам — @ProCxx /Чат по обсуждению всего — @fludpac

Infernal Math
Infernal Math
389 участник(ов)

http://www.zepta.ru/index.php?title=Заглавная_страница Приглашение в чат: https://t.me/matheden

C++ Russia
C++ Russia
384 участник(ов)

Сообщество разработчиков C++ в Telegram.

cxx.Дискуссионная
cxx.Дискуссионная
298 участник(ов)

это не двач, общайтесь вежливо; разговор на почти любые темы; Не согласны с баном? В лс @AlexFails, @ivario

comput.math
comput.math
289 участник(ов)

Прикладная математика и численные методы. Без оффтопа, рекламы, флуда. Вышмат: @higher_math Физика: @physpub Новичкам: @starter_math @JuliaLanguage @rlang_ru Книги брать здесь: libgen.io И по хештегу #book

higher.math
higher.math
234 участник(ов)

Higher mathematics / высшая математика Подборка книжек: https://ru.stackoverflow.com/a/683632/1084 Вычмат: @comput_math Физика: @physpub LaTeX: @pro_latex

C++ для маленьких и тупых
C++ для маленьких и тупых
105 участник(ов)

Лоу левел (по среднему IQ участников) чатик ExtremeCode @extremecode Флудилка @extremecode_rest

Starter Math
Starter Math
79 участник(ов)

Для тех, кто боится спросить в @higher_math Вычмат: @comput_math Физика: @physpub