Методи бібліотеки математики мовою програмування Go Go


9

Я програмував у google Golang і насолоджувався ним завдяки своїй стислість, але мені здається, що майже всі його стандартні методи бібліотеки Math призначені для типу з плаваючою комою. Чи є якась конкретна причина, чому ці методи не існують для ints?

Відповіді:


9

Коротка відповідь полягає в тому, що Go є спадкоємцем C, а стандартна математична бібліотека C також визначається майже виключно з точки зору значень з плаваючою точкою з одно- та подвійною точністю.

Більш довга відповідь полягає в тому, що в мові статичного типу без поліморфізму або перевантаження функцій, як-от Go (або C), вам потрібно визначитися з типом, щоб функція взяла та повернула заздалегідь, і як тільки ви збираєтеся мати справу з конкретних типів у вашій математичній бібліотеці, є набагато цікавіші операції з числами з плаваючою комою, ніж цілі числа. Щоб вибрати кілька прикладів

  • квадратний чи n-й корінь цілого чи числа з плаваючою точкою зазвичай не представляють як ціле число

  • дуже мало цікавих значень трансцендентальних функцій представлені у вигляді цілих чисел

  • ділення значень з плаваючою комою вимагає меншого округлення, ніж ділення цілих чисел

Зауважте, що це не так обтяжливо, як може здатися, якщо ваші вхідні значення є цілими числами - інтегральне значення може бути перетворене у значення з плаваючою комою простим набором тексту, і в основному точно.

Тож це історія для таких мов, як Go або C. Інші мови мають інші варіанти:

  • Динамічно типізована мова може надавати математичні функції бібліотеки, які приймають або повертають кілька типів залежно від того, з чим вони викликаються, чи є значення, що повертається, представлене як ціле число.

  • Мова з перевантаженням функцій може надавати кілька версій однієї і тієї ж функції, залежно від типів, які ви передаєте (строго, це кілька функцій з тим самим іменем, що відрізняються від динамічно набраного випадку вище)

  • Мова з поліморфізмом типу (наприклад, об'єктно-орієнтована мова з успадкуванням) може визначити надклас "Число" з підкласами як для цілих чисел, так і для значень з плаваючою комою, а потім визначити математичні функції в термінах цього класу Чисел. Цей підхід має велику гнучкість динамічного підходу до мови, при цьому зберігається значна суворість статичного підходу або функції перевантаження функцій.

Однак Go не має жодної з цих особливостей.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.