Вопрос № 29599: Немного странный вопрос по поводу функции MulDiv.
Я хотел бы узнать каково её практическое применение.
Не понятно почему она выделена под отдельную функцию.
Или может быть я не правильно понял её.
Расскажите пожалуйста(желательно всё ...
Вопрос № 29.599
Немного странный вопрос по поводу функции MulDiv.
Я хотел бы узнать каково её практическое применение.
Не понятно почему она выделена под отдельную функцию.
Или может быть я не правильно понял её.
Расскажите пожалуйста(желательно всё таки практическое применение).
Заранее благодарю за столь странный вопрос.
Отвечает: Лысков Игорь Витальевич
Здравствуйте, Чурсанов Евгений Ильич!
А вот когда надо два числа умножить и разделить на третье, и применяй :)
Видать, программисты с MS посчитали необходимым выделить это операцию в отдельную функцию. Скорее всего, для компактности исходного кода.
Не нравится - не применяй :)
Отвечает: Bob Johnson
Здравствуйте, Чурсанов Евгений Ильич!
Для человека, пишущего на асме на первый взгляд эта функция - бред. Зачем действительно ее выделять? На самом деле ответ прост - когда ты пишешь на си, то результат умножения двух 32-х разрядных чисел тоже является 32-х разрядным (хотя процессор выдает 64-х разрядный результат, но старшые 32 бита просто игнорируются). Иногда бывает задача умножить 32-х разрядное число на другое, а затем поделить на 3-е, и ты знаешь, что результат тоже будет 32-х разрядный. Например, ты делаешь прогрессбар копирования файла
- ты берешь количество скопированных байт, умножаешь на 100 и делишь на длину файла. При этом результат умножения вполне может выходить за пределы 32-х разрядов (допустим, файл 1 Гб (вообще, с файлами надо работать 64-х битной арифметикой, но представим, что мы на fat32)). Делить же количество скопированных байт на длину файла, а затем умножать на 100 бесполезно - будем получать либо 0, либо сразу 100 (арифметика целочисленная). вот тут программисту на си и приходит на помо
щь функция MulDiv. Можно, конечно, сделать это асмовой вставкой, но чтобы не нарушать общую эстетику программы, лучше вызывать эту функцию.
Ответ отправил: Bob Johnson (статус: Академик)
Отправлен: 15.11.2005, 23:40