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

Материал из Олимпиадное программирование в УлГТУ
Перейти к навигации Перейти к поиску
Нет описания правки
Нет описания правки
Строка 1: Строка 1:
== Ввод и вывод ==
=== cin/cout работает медленнее scanf/printf ===
=== cin/cout работает медленнее scanf/printf ===
* [http://codeforces.ru/blog/entry/562 Codeforces — Ввод/вывод в C++]
* [http://codeforces.ru/blog/entry/562 Codeforces — Ввод/вывод в C++]
Строка 6: Строка 8:
=== endl сбрасывает буфер вывода после перевода строки ===
=== endl сбрасывает буфер вывода после перевода строки ===
* [http://codeforces.ru/contest/417/submission/6392130 #6392130] vs [http://codeforces.ru/contest/417/submission/10923857 #10923857]
* [http://codeforces.ru/contest/417/submission/6392130 #6392130] vs [http://codeforces.ru/contest/417/submission/10923857 #10923857]
=== Различные компиляторы по-разному округляют вещественные числа с последним дробным разрядом 5 ===
* [http://www.exploringbinary.com/inconsistent-rounding-of-printed-floating-point-numbers/ exploringbinary.com — Inconsistent Rounding of Printed Floating-Point Numbers]
== Вещественные числа ==


=== Вещественные числа нужно использовать с осторожностью; функции <math.h> работают с вещественными числами ===
=== Вещественные числа нужно использовать с осторожностью; функции <math.h> работают с вещественными числами ===
* [http://ideone.com/yBUC04 ideone.com/yBUC04]
* [http://ideone.com/4wnPS0 ideone.com/4wnPS0]
* [http://isocpp.org/wiki/faq/newbie#floating-point-arith isocpp.org &mdash; Why doesn’t my floating-point comparison work?]
* [http://isocpp.org/wiki/faq/newbie#floating-point-arith isocpp.org &mdash; Why doesn’t my floating-point comparison work?]
* Макконнелл С. Совершенный код / С. Макконнелл. &mdash; М.: Русская редакция, 2010. &mdash; 896 с. &mdash; П. 12.3. &laquo;Числа с плавающей запятой&raquo;, с. 286
* Макконнелл С. Совершенный код / С. Макконнелл. &mdash; М.: Русская редакция, 2010. &mdash; 896 с. &mdash; П. 12.3. &laquo;Числа с плавающей запятой&raquo;, с. 286
Строка 21: Строка 30:
* [http://codeforces.com/contest/600/submission/14750408 #14750408] vs [http://codeforces.com/contest/600/submission/14750411 #14750411]
* [http://codeforces.com/contest/600/submission/14750408 #14750408] vs [http://codeforces.com/contest/600/submission/14750411 #14750411]


=== В <math.h> Visual C++ уже заняты глобальные имена j0, j1, jn, y0, y1, yn ===
== Особенности функций ==
* [http://acm.timus.ru/help.aspx?topic=cpp Timus &mdash; Как писать решения на C/C++] (Раздел &laquo;Особенности компилятора по сравнению с другими 32-битными компиляторами C/C++&raquo;)


=== Метод .size() у контейнеров STL возвращает беззнаковое число ===
=== Метод .size() у контейнеров STL возвращает беззнаковое число ===
Строка 30: Строка 38:
=== В <ctype.h> функции классификации символов (такие как isupper()) могут возвращать не только 0 и 1 ===
=== В <ctype.h> функции классификации символов (такие как isupper()) могут возвращать не только 0 и 1 ===
* [http://ideone.com/GUKcBa ideone.com/GUKcBa]
* [http://ideone.com/GUKcBa ideone.com/GUKcBa]
== Разное ==
=== В <math.h> Visual C++ уже заняты глобальные имена j0, j1, jn, y0, y1, yn ===
* [http://acm.timus.ru/help.aspx?topic=cpp Timus &mdash; Как писать решения на C/C++] (Раздел &laquo;Особенности компилятора по сравнению с другими 32-битными компиляторами C/C++&raquo;)

Версия от 07:23, 17 июня 2017

Ввод и вывод

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

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

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

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

Вещественные числа нужно использовать с осторожностью; функции <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