Сообщение Re[24]: И еще рассуждения об ИИ от 11.02.2026 10:48
Изменено 11.02.2026 11:50 Pavel Dvorkin
Re[24]: И еще рассуждения об ИИ
Здравствуйте, Sinclair, Вы писали:
S>Эмм, вообще-то преподаватель технического ВУЗа по айтишной специальности должен хоть краем глаза слышать о методах проверки корректности программ. В частности, о дедуктивной верификации.
Слышал.
S>А вот ИИ на эту программу выдаст следующее:
S>В программе есть несколько ошибок и неточностей. Разберём их по порядку.
<skipped>
Да, конечно, написал с ошибками. Писал прямо здесь. Увы, у меня не установлен сейчас С++ компилятор на машине, давно с ним не работал. Раньше я перед постингом обычно проверял работу кода.
Остальное skipped, потому что относится к ошибкам в коде, а не к основному вопросу про переполнение.
Кроме вот этого.
S>Возможное переполнение
S>Если l и w достаточно большие, произведение может переполнить unsigned int.
S>Если это учебная задача — всё нормально.
Это не учебная задача, а пример ad hoc, сделанный для иллюстрации вопроса.
В итоге имеем лишь одно замечание по существу — про возможность переполнения. То, что переполнение "в принципе" возможно при умножении 2 uint — для этого не надо никаких верификаций, это и так ясно. И из этого вовсе не следует, что так уж необходимо перейти к ulong.
Я ничего против того, что он на это указал, не имею. Пусть напомнит, верно. Но меня-то иное интересовало — может ли оно быть при тех данных, которые меня интересуют. А на этот вопрос у него ответа нет.
Если эти длина и ширина — размеры дисплея обычной машины в пикселях, то совершенно спокойно можно остаться с unit — пока что дисплеев с размерами, при которых переполнение возможно, в природе нет.
Если это что-то другое — надо знать, какие могут быть значения у этих величин. Вот я приводил 100000 как пример. Допустим, я не знаю, каков maxint. Делаю несколько простейших тестов — работает. Делаю тест 100000 на 100000 — проваливается. Все. Действительно, надо переходить к ulong.
Ну а если это размеры дисплея — ну сделаю тест 10000 на 10000, все будет в порядке, можно так и оставить.
Так что тест мне ошибку найти сможет, а этот анализ лишь говорит, что она в принципе возможна. Это и без него ясно.
S>Эмм, вообще-то преподаватель технического ВУЗа по айтишной специальности должен хоть краем глаза слышать о методах проверки корректности программ. В частности, о дедуктивной верификации.
Слышал.
S>А вот ИИ на эту программу выдаст следующее:
S>В программе есть несколько ошибок и неточностей. Разберём их по порядку.
<skipped>
Да, конечно, написал с ошибками. Писал прямо здесь. Увы, у меня не установлен сейчас С++ компилятор на машине, давно с ним не работал. Раньше я перед постингом обычно проверял работу кода.
Остальное skipped, потому что относится к ошибкам в коде, а не к основному вопросу про переполнение.
Кроме вот этого.
S>Возможное переполнение
S>Если l и w достаточно большие, произведение может переполнить unsigned int.
S>Если это учебная задача — всё нормально.
Это не учебная задача, а пример ad hoc, сделанный для иллюстрации вопроса.
В итоге имеем лишь одно замечание по существу — про возможность переполнения. То, что переполнение "в принципе" возможно при умножении 2 uint — для этого не надо никаких верификаций, это и так ясно. И из этого вовсе не следует, что так уж необходимо перейти к ulong.
Я ничего против того, что он на это указал, не имею. Пусть напомнит, верно. Но меня-то иное интересовало — может ли оно быть при тех данных, которые меня интересуют. А на этот вопрос у него ответа нет.
Если эти длина и ширина — размеры дисплея обычной машины в пикселях, то совершенно спокойно можно остаться с unit — пока что дисплеев с размерами, при которых переполнение возможно, в природе нет.
Если это что-то другое — надо знать, какие могут быть значения у этих величин. Вот я приводил 100000 как пример. Допустим, я не знаю, каков maxint. Делаю несколько простейших тестов — работает. Делаю тест 100000 на 100000 — проваливается. Все. Действительно, надо переходить к ulong.
Ну а если это размеры дисплея — ну сделаю тест 10000 на 10000, все будет в порядке, можно так и оставить.
Так что тест мне ошибку найти сможет, а этот анализ лишь говорит, что она в принципе возможна. Это и без него ясно.
Re[24]: И еще рассуждения об ИИ
Здравствуйте, Sinclair, Вы писали:
S>Эмм, вообще-то преподаватель технического ВУЗа по айтишной специальности должен хоть краем глаза слышать о методах проверки корректности программ. В частности, о дедуктивной верификации.
Слышал.
S>А вот ИИ на эту программу выдаст следующее:
S>В программе есть несколько ошибок и неточностей. Разберём их по порядку.
<skipped>
Да, конечно, написал с ошибками. Писал прямо здесь. Увы, у меня не установлен сейчас С++ компилятор на машине, давно с ним не работал. Раньше я перед постингом обычно проверял работу кода.
Остальное skipped, потому что относится к ошибкам в коде, а не к основному вопросу про переполнение.
Кроме вот этого.
S>Возможное переполнение
S>Если l и w достаточно большие, произведение может переполнить unsigned int.
S>Если это учебная задача — всё нормально.
Это не учебная задача, а пример ad hoc, сделанный для иллюстрации вопроса.
В итоге имеем лишь одно замечание по существу — про возможность переполнения. То, что переполнение "в принципе" возможно при умножении 2 uint — для этого не надо никаких верификаций, это и так ясно. И из этого вовсе не следует, что так уж необходимо перейти к ulong.
Я ничего против того, что он на это указал, не имею. Пусть напомнит, верно. Но меня-то иное интересовало — может ли оно быть при тех данных, которые меня интересуют. А на этот вопрос у него ответа нет.
Если эти длина и ширина — размеры дисплея обычной машины в пикселях, то совершенно спокойно можно остаться с unit — пока что дисплеев с размерами, при которых переполнение возможно, в природе нет.
Если это что-то другое — надо знать, какие могут быть значения у этих величин. Вот я приводил 100000 как пример. Допустим, я не знаю, каков maxint. Делаю несколько простейших тестов — работает. Делаю тест 100000 на 100000 — проваливается. Все. Действительно, надо переходить к ulong.
Ну а если это размеры дисплея — ну сделаю тест 10000 на 10000, все будет в порядке, можно так и оставить.
Так что тест мне ошибку найти сможет, а этот анализ лишь говорит, что она в принципе возможна. Это и без него ясно.
Впрочем, можно и более простой пример привести. даже без умножения.
unsigned int population;
Это корректно или нет ?
Если это население страны, то я нелестно выскажусь в адрес того, кто мне скажет, что может не хватить. Нет таких стран с населением 4 млрд. человек и скорее всего не будет. А если когда-то и будет, то моей программы уже точно не будет
Если это население Земли, то не годится. Не хватит. Сейчас. А были бы компьютеры в 15 веке, сказали бы, что вполне хватит. И несколько веков бы вполне хватило.
Что мне тут статический анализ скажет ? Про потенциальную возможность переполнения при суммировании любых чисел ? Спасибо. Без него я бы не догадался
А тест скажет. Найдем население Земли как сумму населений стран — и все. Приехали. Сейчас. А в 15 веке все было бы в порядке.
S>Эмм, вообще-то преподаватель технического ВУЗа по айтишной специальности должен хоть краем глаза слышать о методах проверки корректности программ. В частности, о дедуктивной верификации.
Слышал.
S>А вот ИИ на эту программу выдаст следующее:
S>В программе есть несколько ошибок и неточностей. Разберём их по порядку.
<skipped>
Да, конечно, написал с ошибками. Писал прямо здесь. Увы, у меня не установлен сейчас С++ компилятор на машине, давно с ним не работал. Раньше я перед постингом обычно проверял работу кода.
Остальное skipped, потому что относится к ошибкам в коде, а не к основному вопросу про переполнение.
Кроме вот этого.
S>Возможное переполнение
S>Если l и w достаточно большие, произведение может переполнить unsigned int.
S>Если это учебная задача — всё нормально.
Это не учебная задача, а пример ad hoc, сделанный для иллюстрации вопроса.
В итоге имеем лишь одно замечание по существу — про возможность переполнения. То, что переполнение "в принципе" возможно при умножении 2 uint — для этого не надо никаких верификаций, это и так ясно. И из этого вовсе не следует, что так уж необходимо перейти к ulong.
Я ничего против того, что он на это указал, не имею. Пусть напомнит, верно. Но меня-то иное интересовало — может ли оно быть при тех данных, которые меня интересуют. А на этот вопрос у него ответа нет.
Если эти длина и ширина — размеры дисплея обычной машины в пикселях, то совершенно спокойно можно остаться с unit — пока что дисплеев с размерами, при которых переполнение возможно, в природе нет.
Если это что-то другое — надо знать, какие могут быть значения у этих величин. Вот я приводил 100000 как пример. Допустим, я не знаю, каков maxint. Делаю несколько простейших тестов — работает. Делаю тест 100000 на 100000 — проваливается. Все. Действительно, надо переходить к ulong.
Ну а если это размеры дисплея — ну сделаю тест 10000 на 10000, все будет в порядке, можно так и оставить.
Так что тест мне ошибку найти сможет, а этот анализ лишь говорит, что она в принципе возможна. Это и без него ясно.
Впрочем, можно и более простой пример привести. даже без умножения.
unsigned int population;
Это корректно или нет ?
Если это население страны, то я нелестно выскажусь в адрес того, кто мне скажет, что может не хватить. Нет таких стран с населением 4 млрд. человек и скорее всего не будет. А если когда-то и будет, то моей программы уже точно не будет
Если это население Земли, то не годится. Не хватит. Сейчас. А были бы компьютеры в 15 веке, сказали бы, что вполне хватит. И несколько веков бы вполне хватило.
Что мне тут статический анализ скажет ? Про потенциальную возможность переполнения при суммировании любых чисел ? Спасибо. Без него я бы не догадался
А тест скажет. Найдем население Земли как сумму населений стран — и все. Приехали. Сейчас. А в 15 веке все было бы в порядке.