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);