Приколи з числами в C#
Деякі цікавинки з числами в C#. В коментарях - те що виводиться на консоль:
Console.WriteLine(1 / 5); // 0
Console.WriteLine(5.0 / 0); // безмежн?сть
Console.WriteLine(-5.0 / 0); // -безмежн?сть
Console.WriteLine(0.0 / 0); // NaN
Console.WriteLine(9.666e-7f); // 9,666001E-07
Console.WriteLine(1234567f + .1234567f); // 1234567
Console.WriteLine(16777216f == 16777217f); // True
Чи можете ви пояснити кожен рядок чому так а не інак?
Замітка: суфікс f в останніх 3х прикладах означає в C# приведення до типу float.
P.S. Ось чому дуже точні обчислення на C# потрібно робити за допомогою decimal ;)
1 і 5 цілочисельні типи. і відповідно результат буде цілочисельним типом. 1/5 = 0,2 що в цілочисельній сфері дорівнює 0
Console.WriteLine(5.0 / 0); // безмежнесть
на нуль ділити не можна. є ціла теорія в теоріїї чисел що говорить про безмежність. от її і втілили в життя програмісти майкрософту
Console.WriteLine(-5.0 / 0); // -безмежн?сть
аналогічно. а якщо поділити на нуль, то отримується безмежність. є ціла теорія в теоріїї чисел що говорить про безмежність. от її і втілили в життя програмісти майкрософту
Console.WriteLine(0.0 / 0); // NaN аналогічно до двої попередніх пунктів
Console.WriteLine(9.666e-7f); // 9,666001E-07
числа з плаваючою комою зберігаються не обовязково так як ти їх задаєш.
Console.WriteLine(1234567f + .1234567f); // 1234567
не знаю. пошукаю.
Console.WriteLine(16777216f == 16777217f); // True
при приведенні до чисел з плаваючою комою останні 7 і 6 до уваги не беруться
Щодо останніх двох прикладів є гарне пояснення тут - http://www.stata.com/support/faqs/data/prec.html