История изменений
Исправление KivApple, (текущая версия) :
Во-первых, твоя проблема решена в языках, где можно задавать диапазоны для пользовательских типов. Например, в Pascal.
Во-вторых, тебе нужны проверки в runtime или в compile time? Первое в плюсах реализовать можно с помощью класса-обёртки над int (при отсутствии виртуальных методов и передаче его экземпляров по значению, никакого оверхеда не будет, в этом и мощь плюсов), который в конструкторе проверяет диапазон. Второе это уже из области формальной верификации алгоритмов и является весьма нетривиальной задачей, потому что эти самые твои проценты могут появляться в результате других вычислений, в результате пользовательского ввода и т. д. И проверить, что никак не случился выход за границу не утыкивая код if непросто. Можешь поиграться с каким-нибудь статическим анализатором. Например, FramaC, там можно утыкать код аннотациями с предусловиеми и постусловиями, а он тебе попытается сказать, выполняются они или нет.
В-третьих, плюсую ораторов, которые говорят, что максимальное число процентов зависит от контекста. Легко представить себе и больше 100% и даже меньше 0. Самый банальный пример «отток мозгов из страны увеличился на 200%» и «зарплаты показали отрицательный рост на 25%».
Исправление KivApple, :
Во-первых, твоя проблема решена в языках, где можно задавать диапазоны для пользовательских типов. Например, в Pascal.
Во-вторых, тебе нужны проверки в runtime или в compile time? Первое в плюсах реализовать можно с помощью класса-обёртки над int (при отсутствии виртуальных методов и передаче его экземпляров по значению, никакого оверхеда не будет, в этом и мощь плюсов), который в конструкторе проверяет диапазон. Второе это уже из области формальной верификации алгоритмов и является весьма нетривиальной задачей, потому что эти самые твои проценты могут появляться в результате других вычислений, в результате пользовательского ввода и т. д. И проверить, что никак не случился выход за границу не утыкивая код if непросто. Можешь поиграться с каким-нибудь статическим анализатором. Например, FramaC, там можно утыкать код аннотациями с предусловиеми и постусловиями, а он тебе попытается сказать, выполняются они или нет.
В-третьих, плюсую ораторов, которые говорят, что максимальное число процентов зависит от контекста. Легко представить себе и больше 100% и даже меньше 0. Самый банальный пример «значение увеличилось на 200%» и «зарплаты показали отрицательный рост на 25%».
Исправление KivApple, :
Во-первых, твоя проблема решена в языках, где можно задавать диапазоны для пользовательских типов. Например, в Pascal.
Во-вторых, тебе нужны проверки в runtime или в compile time? Первое в плюсах реализовать можно с помощью класса-обёртки над int (при отсутствии виртуальных методов и передаче его экземпляров по значению, никакого оверхеда не будет, в этом и мощь плюсов), который в конструкторе проверяет диапазон. Второе это уже из области формальной верификации алгоритмов и является весьма нетривиальной задачей, потому что эти самые твои проценты могут появляться в результате других вычислений, в результате пользовательского ввода и т. д. И проверить, что никак не случился выход за границу не утыкивая код if непросто. Можешь поиграться с каким-нибудь статическим анализатором. Например, FramaC, там можно утыкать код аннотациями с предусловиеми и постусловиями, а он тебе попытается сказать, выполняются они или нет.
Исправление KivApple, :
Во-первых, твоя проблема решена в языках, где можно задавать диапазоны для пользовательских типов. Например, в Pascal.
Во-вторых, тебе нужны проверки в runtime или в compile time? Первое в плюсах реализовать можно с помощью класса-обёртки над int (при отсутствии виртуальных методов и передаче его экземпляров по значению, никакого оверхеда не будет, в этом и мощь плюсов), который в конструкторе проверяет диапазон. Второе это уже из области формальной верификации алгоритмов и является весьма нетривиальной задачей, потому что эти самые твои проценты могут появляться в результате других вычислений, в результате пользовательского ввода и т. д. И проверить, что никак не случился выход за границу не утыкивая код if непросто.
Исходная версия KivApple, :
Во-первых, твоя проблема решена в языках, где можно задавать диапазоны для пользовательских типов. Например, в Pascal.
Во-вторых, тебе нужны проверки в runtime или в compile time? Первое в плюсах реализовать можно с помощью класса-обёртки над int (при отсутствии виртуальных методов и передаче его экземпляров по значению, никакого оверхеда не будет), который в конструкторе проверяет диапазон. Второе это уже из области формальной верификации алгоритмов и является весьма нетривиальной задачей, потому что эти самые твои проценты могут появляться в результате других вычислений, в результате пользовательского ввода и т. д. И проверить, что никак не случился выход за границу не утыкивая код if непросто.