3 języki programowania, ta sama funkcja a różne wyniki.

Czy wiesz co „wypluje” twój program jak korzystasz z funkcji round?

Dane wejściowe to: [-2.5; -1.5; -0.5; 0.5; 1.5; 2.5]

Języki, które będziemy sprawdzać to C (round z cmath), JavaScript (Math.round()), C# (Math.Round()) – Wszystkie w domyślnej konfiguracji; jedno-parametrowej wersji.

Znasz odpowiedź?

Poniżej znajduje się rezultat testu:

Pierwsza kolumna to dane wejściowe a w następnych kolumnach znajdują się dane „wyplute” przez funkcję round znajdującą się w bibliotece standardowej przypisaną dla danego języka.

Jedyny język który w domyślnie zaokrągla tak jak to poznaliśmy na lekcji matematyki jest język C.

JavaScript działa tak:

Jeśli część ułamkowa liczby x wynosi 0.5 lub więcej, argument jest zaokrąglany do najbliższej większej liczby całkowitej. Jeśli część ułamkowa liczby x jest mniejsza niż 0.5, argument jest zaokrąglany do najbliższej mniejszej liczby całkowitej. – MDN

Największe zdziwienie budzi C#. Zaokrągla połówki do parzystej liczby. Takie zachowanie jest wypełnieniem standardu IEEE Standard 754, sekcja 4, który sugeruje takie podejście do zaokrąglania, które zmniejsza błąd obliczeń. W celu zaoglągenia liczby tak jak tego się nauczyliśmy na matematyce musimy napisać Math.Round(2.5, 0, MidpointRounding.AwayFromZero);