Грабли: различия между версиями

Материал из Олимпиадное программирование в УлГТУ
Перейти к навигации Перейти к поиску
Нет описания правки
Строка 12: Строка 12:
* [http://www.exploringbinary.com/inconsistent-rounding-of-printed-floating-point-numbers/ exploringbinary.com — Inconsistent Rounding of Printed Floating-Point Numbers]
* [http://www.exploringbinary.com/inconsistent-rounding-of-printed-floating-point-numbers/ exploringbinary.com — Inconsistent Rounding of Printed Floating-Point Numbers]
* [http://ideone.com/I8kEuE ideone.com/I8kEuE]
* [http://ideone.com/I8kEuE ideone.com/I8kEuE]
=== Аккуратнее с %lld и %I64d: %lld предпочтительнее ===
* %lld некорректно работает в очень древних Visual C++, а также в GNU C++ (MinGW) под Windows XP ('''например, на acmp.ru''').
* [http://ideone.com/kJ37fO %I64d некорректно работает в GNU C++ под Linux] (то есть почти везде).
* Codeforces: [http://codeforces.com/blog/entry/6727 1], [http://codeforces.com/blog/entry/7912 2]
* [http://discuss.codechef.com/questions/31014/difference-between-i64d-lld CodeChef]


== Вещественные числа ==
== Вещественные числа ==

Версия от 22:18, 31 января 2018

Ввод и вывод

cin/cout работает медленнее scanf/printf

endl сбрасывает буфер вывода после перевода строки

Различные компиляторы по-разному округляют вещественные числа с последним дробным разрядом 5

Аккуратнее с %lld и %I64d: %lld предпочтительнее

Вещественные числа

Вещественные числа нужно использовать с осторожностью; функции <math.h> работают с вещественными числами

Если не хватает точности double

  1. Меняем все double на long double;
  2. Меняем все вызовы cstdio (scanf/printf) на вызовы iostream (cin/cout);
  3. Добавляем l ко всем функциям cmath (sqrt -> sqrtl, atan2 -> atan2l);
  4. Сдаём под g++.

Особенности функций

Метод .size() у контейнеров STL возвращает беззнаковое число

В <ctype.h> функции классификации символов (такие как isupper()) могут возвращать не только 0 и 1

Разное

В <math.h> Visual C++ уже заняты глобальные имена j0, j1, jn, y0, y1, yn