![]() |
Тестирование процедур деления многоразрядных чисел
Иногда приходится реализовывать алгоритмы деления многоразрядных
чисел (с произвольным количеством разрядов) и с произвольным осно- ванием системы счисления B >= 2 (необязательно 10). Алгоритмы деле- ния известны и описаны в множестве книг по программированию, крип- тографии и компьютерной алгебре. Однако в таких книгах почти ничего говорится как тестировать корректность процедуры деления, какие вы- бирать числа для тестирования всех особых случаем алгоритма деления. Генерация случайных пар делимого и делителя (причем делимое больше делителя) часто даже после миллиона испытаний не попадают на особые случаи и ветки алгоритма, отвечающие за эти случаи, остаются непрове- ренными и нет гарантий того, что не осталась какая-то скрытая ошибка, которая потом неожиданно проявит себя в самый неподходящий момент. Для четных оснований B экспериментальным путем я нашел интересную пару делимого и делителя, которая заставляет проходить алгоритмы де- ления через все особые ветки, и если процедура реализована с ошибкой, то это обязательно проявится в виде неверного частного и остатка, или же процедура деления вообще упадет с ошибкой или зависнет в циклах. Делимое 6-разрядное B-ичное число (В - четное): B/2+1, 2, 0, B/2-2, B-5, 0 Делитель 3-разрядное B-ичное число (В - четное): B/2, B/2+1, B/2 Частное получается 4-разрядное B-ичное число: 1, 0, B-1, B-3 Остаток получается 3-разрядное B-ичное число: B/2, B/2-1, B/2 В частности, в традиционной 10-й системе счисления тестовые числа: Делимое: 620350 Делитель: 565 Частное: 1097 Остаток: 545 Таким образом, одним тестом можно проверить на вшивость всю процедуру. |
Текущее время: 00:53. Часовой пояс GMT +3. |
Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, vBulletin Solutions, Inc. Перевод: zCarot
© 2001—2025, «Аспирантура. Портал аспирантов»