Предложение: добавить предупреждение в лог при сравнении больших чисел в условии 'If'

SAT

Client
Регистрация
24.12.2024
Сообщения
20
Благодарностей
52
Баллы
13
Здравствуйте, уважаемые разработчики и участники сообщества!
По рекомендации администратора djaga создаю тему в этом разделе, чтобы формализовать предложение, которое мы ранее обсуждали в личной беседе. Эта инициатива направлена на повышение стабильности и предсказуемости работы проектов, особенно тех, которые оперируют большими числовыми значениями.

Суть проблемы

Встроенный условный оператор If-Else может возвращать некорректный результат при сравнении очень больших целых чисел. По всей видимости, это связано с ограничениями стандартных типов данных (.NET), которые могут приводить к потере точности.
Конкретный пример: Если сравнить два почти одинаковых, но все же разных больших числа:
  • Переменная X = 15655000000001564
  • Переменная Y = 15655000000001565
Условие {-Variable.X-}=={-Variable.Y-} может неожиданно вернуть true (истина), хотя на самом деле числа не равны.
Такая неочевидная ошибка может приводить к критическим сбоям в логике проектов, особенно в сферах, где точность имеет первостепенное значение (например, работа с API бирж, обработка уникальных идентификаторов и т.д.). Обнаружить подобный баг на этапе отладки крайне сложно, так как он проявляется лишь на специфических данных.

Предлагаемое решение

Чтобы помочь пользователям избежать подобных проблем, предлагаю реализовать автоматическое предупреждение в логе ZennoPoster.
Это предупреждение должно появляться в тот момент, когда в условном операторе If используются числа, превышающие безопасный предел для точного сравнения (например, максимальное значение для типа Int64 или безопасный целочисленный предел для double).
Пример текста предупреждения в логе:
[ПРЕДУПРЕЖДЕНИЕ] В действии 'If' (ID: {action_id}) производится сравнение чисел ({Variable.X} и {Variable.Y}), которые могут превышать лимит точности стандартных типов данных. Для гарантированно корректной работы с такими большими числами рекомендуется использовать C#-код с типом BigInteger.


Почему это важно и полезно:

  1. Предотвращение ошибок на ранней стадии. Разработчик шаблона сразу увидит потенциальную проблему в логе и сможет принять меры, не дожидаясь критического сбоя на реальных данных.
  2. Минимальные затраты на реализацию. Это не требует перестройки основного функционала, а лишь добавляет проверку и вывод сообщения в лог.
  3. Повышение надежности платформы. ZennoPoster станет еще более надежным инструментом для решения сложных задач.
  4. Улучшение опыта разработчиков. Это сэкономит множество часов отладки и предотвратит финансовые или репутационные потери пользователей.
Это небольшое, но важное изменение поможет сделать ZennoPoster еще более надежным и удобным инструментом, защищая сообщество от скрытых и опасных ошибок.
Благодарю за внимание к этому предложению и надеюсь на его рассмотрение.
С уважением, SAT
 

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 860
Благодарностей
1 485
Баллы
113
Если честно, предложения, которые можно описать двумя строками, и все поймут, и о чем это, и почему это надо, просить расписать на стену текста нейросейтью - это ******ец... Без обид )))
Мы и так вошли в эпоху сплошного информационного шума/мусора, давайте не увеличивать его количество. Тратить время/силы на то, чтобы увидеть суть, которая содержится в паре слов - кому это надо?
Оформил - красиво. Выглядит - шикарно. Пользы - ноль!
Если ты не можешь СВОИМИ СЛОВАМИ донести до коллег и разрабов мысль и предложение, причем, кратко, то, имхо, не удивляйся, что и прислушиваться так же будут...
ps. Само предложение поддерживаю, но при этом суть его понял из заголовка, этого было достаточно, весь остальной текст - нафиг был не нужен (сплошное имхо, но такими темпами мы дойдем до того, что и разрабы на предложения начнут через ChatGPT отвечать, и тогда кучи предложений от Константина, может, дурацких, но описанных кратко и по делу, покажутся "золотыми временами").
Может, конечно, душню, но как-то не хочется, чтобы форум превращался в общение ChatGPT с Gemini, пропущенное через Grok ))) Даже из уважения друг к другу ))
 

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 580
Благодарностей
901
Баллы
113
Поддерживаю, уже тоже пригорает с подобного, своей головой скоро пользоваться забудут как
 

SAT

Client
Регистрация
24.12.2024
Сообщения
20
Благодарностей
52
Баллы
13
LOL, ваши каракули приняты к сведенью. А теперь прямым текстом. Че пристали?
Если не можете совокупится с мыслями по этому поводу ну не знаю, собери свою фан зонку и будьте в ней такой большой шишкой, ища себе жертв среди иного скота.

А для упырей которых это бесит, знайте еще несколько лет пройдет и общество придет к выводу что только так и нужно было. Да и мнения щепок, не сформированных в большинство забудут.
 

Oleg1987

Client
Регистрация
11.08.2014
Сообщения
1 319
Благодарностей
856
Баллы
113
но при этом суть его понял из заголовка
Отстали вы батенька от прогресса. Нужно было его портянку отдать ии - чтоб она выжимку сделала. А потом ответ написала на 5 экранов
 

SAT

Client
Регистрация
24.12.2024
Сообщения
20
Благодарностей
52
Баллы
13
Отстали вы батенька от прогресса. Нужно было его портянку отдать ии - чтоб она выжимку сделала. А потом ответ написала на 5 экранов
И такими же аналитическими средствами написала отчетность на 255 экранов, о всех обибках которые уже произошли, а вы просто о них не знали.
 

i.stasik

Client
Регистрация
25.09.2023
Сообщения
318
Благодарностей
63
Баллы
28
Условие {-Variable.X-}=={-Variable.Y-} может неожиданно вернуть true (истина), хотя на самом деле числа не равны.
после true (истина) по зеленой ветке сделайте доп проверку вычитанием
{-Variable.X-}-{-Variable.Y-}
если результат равен 0, то сравнение чисел было верное

можно сравнение больших чисел заменить вычитанием и проверять <0 или >0
 
  • Спасибо
Реакции: AlexMill

AlexMill

Новичок
Регистрация
01.02.2024
Сообщения
12
Благодарностей
4
Баллы
3

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)