Я вижу, в отличие от Double, Int в Swift не имеет бесконечности. Единственное, что у нас есть, это Int.max и Int.min, которые на самом деле являются числами, и (Int.max - 1) не совпадает с Int.max. Мне нужно выполнить такие операции, как:
//maximumDuration is Integer...width, widthPerSecond, currentWidth are CGFloat, all positive
width = max(CGFloat(maximumDuration) * widthPerSecond, currentWidth)
Таким образом, если maxDuration равно Int.max, CGFloat(maximumDuration) * widthPerSecond может не быть Int.max. Фактически, сравнения могут быть ненадежными из-за переполнения.
Как получить истинную бесконечность при использовании типа данных Int? Одним из способов было бы использовать Double вместо Int, но это потребовало бы слишком много приведения типов повсюду в коде.
Это законный вопрос. Типы с плавающей запятой имеют специальные способы представления значений вне диапазона, таких как бесконечность. Двоичные целочисленные типы этого не делают.
Просто невозможно реализовать случайно большие значения, используя двоичные числа фиксированной ширины. Если вам нужны случайно большие значения, вы должны использовать арифметику с плавающей запятой.
Все целочисленные типы являются простыми скалярами. Все биты содержат значение (плюс бит знака для вариантов со знаком). Нет запасных битов для маркировки таких вещей, как NAN, (не число) бесконечность, нормализованная/ненормализованная.
Просто невозможно представить бесконечность с помощью двоичных целочисленных типов. Это не уникально для Swift. Это верно практически для всех разных языков/платформ.
Типы с плавающей запятой используют формат IEEE, в котором некоторые биты резервируются для особых случаев, таких как бесконечность.
Вы можете создать перечисление со связанными значениями, которые имеют случаи для отрицательной и положительной бесконечности, NAN и т.п., но у вас будут те же проблемы приведения/переделки кода, которых вы пытаетесь избежать с числами с плавающей запятой.
Интересно, что в двоично-десятичном коде (BCD) есть запасные биты. Интересно, существует ли стандарт для указания специальных значений, таких как бесконечность, в BCD?
Я не понимаю, что вы здесь хотите, у Int есть четко определенные максимальные и минимальные значения, так как вы должны выходить за эти значения?