Чтобы эмулировать одну команду FPU, требуется от десятков до тысяч команд CPU.
Просто пример из моей практики времён 1990 года: требовалось подсчитать статистику (элементарные арифметические операции, никаких синусов / косинусов) по 200 тысячам точек на ДВК-3м2 без FPU (все данные в оперативной памяти). Программа, написанная c использованием вещественный вычислений, производимых эмулятором FPU, работала примерно 50 минут. Программа, в которой все вычисления производились целочисленно и только на последнем этапе целые числа преобразовывались в вещественные, работала примерно 50 секунд.
что то я не понял. эмулятор работает 50 минут а программа которая сначала считает целыми а потом преобразовывает 50 секунд? то есть при правильном подходе разницы не будет?
Андрей
Высший разум
(427737)
ФермаКактусов, Посмотри формулу среднеквадратичного отклонения. Там нужна в цикле сумма чисел и сумма квадратов чисел. После чего один раз делаются деление и вычисление квадратного корня.
Первая программа считала эти суммы (200000 чисел) в виде вещественных чисел (два вещественных суммирования и одно вещественное умножение, выполняемые эмулятором FPU, на каждое число) и это занимало 50 минут.
Вторая программа сумму самих чисел считала как 32-битное целое. При этом в 16-битной ДВК для сложения 32-битных числе требовалось 3 команды CPU. А вот сумма квадратов в int32 не влезала - она считалась по частям, что тоже требовало дополнительных вычислений. А после цикла получившиеся целые суммы преобразовывались в вещественные числа для дальнейших действий. И это занимало 50 секунд.
Синус и косинус являются тригонометрическими функциями, которые используются в геометрии для выражения отношений сторон в прямоугольных треугольниках или координат точек на окружности
Сложность косинусов и синусов заключается в их геометрической интерпретации и тригонометрических связях. Они широко используются в контексте решения треугольных задач, а также в физике, инженерии и других областях, где имеет значение угловое положение и взаимосвязь между сторонами и углами фигур.
Матрицы - это математические структуры, состоящие из элементов, расположенных в виде прямоугольной таблицы. Матрицы могут быть использованы для решения систем линейных уравнений, выполнения линейных преобразований, а также в других областях математики и информатики.
Сложность матриц заключается в их алгебраической структуре и операциях, таких как умножение матриц, нахождение определителя, решение систем уравнений и другие. Применение матриц распространено в линейной алгебре, теории вероятностей, физике и многих других областях.
Вывод: Косинусы и синусы имеют геометрическую интерпретацию и связаны с тригонометрией. Матрицы представляют алгебраическую структуру и применяются в линейной алгебре и других областях.
Синус или косинус произвольного угла теоретически возможно рассчитать с произвольной погрешностью при помощи ряда Тейлора-Маклорена, вычислив и сложив достаточно большое количество элементов этого ряда. При этом расчет одного синуса или косинуса через такой ряд предполагает множество операций сложения, умножения и деления.
В связи с наличием деления расчет ряда Тейлора-Маклорена идет в дробных числах. Если процессор обрабатывает их медленно, то каждый синус или косинус будет отнимать у него много процессорного времени. Гораздо эффективнее завести таблицы заранее рассчитанных синусов и косинусов и брать значения из них.
При перемножении двух матриц каждый элемент итоговой матрицы равен сумме произведений элементов строки первой матрицы на элементы столбца второй матрицы. Это требует большого числа операций сложения и умножения.
Если процессор медленно работает с дробными числами, то умножение матрицы из дробных элементов отнимет у него много времени. Алгоритм для целочисленных матриц может сработать быстрее, так как умножение матриц не требует деления чисел. Но если мы говорим об аффинных преобразованиях в компьютерной графике, то такие операции, как плавное перемещение через параллельный перенос, поворот на произвольный угол и плавное масштабирование, немыслимы без операций с дробными числами.