Другие языки программирования и технологии
Подскажите, я не понимаю. Говорят про сложность вычислений с плавающей точкой.
Но что там сложного? Я никак не могу понять. Может быть кто нибудь обьяснит в чём сложность? Одно число делишь, либо складываешь с другим. Что сложного не понимаю? Ну используй несколько ядер для обработки каждого такого числа. В чём проблема? Не понимаю.
Абсолютно с вами согласен.
Арифметические операции над числами с плавающей запятой - ОЧЕНЬ просты. Я бы даже сказал, что они элементарны. Имеется значительно более сложные операции типа инструкций SSE с разными номерами.
Если же сравнить их с операциями над числами с фиксированной запятой, то операции с плавающей сложнее хотя бы потому, что в числах с плавающей запятой есть 2 элемента: мантисса и экспонента. Оба этих элемента при всех операциях должны изменяться согласованно, что и требует дополнительных действий от процессора.
Арифметические операции над числами с плавающей запятой - ОЧЕНЬ просты. Я бы даже сказал, что они элементарны. Имеется значительно более сложные операции типа инструкций SSE с разными номерами.
Если же сравнить их с операциями над числами с фиксированной запятой, то операции с плавающей сложнее хотя бы потому, что в числах с плавающей запятой есть 2 элемента: мантисса и экспонента. Оба этих элемента при всех операциях должны изменяться согласованно, что и требует дополнительных действий от процессора.
Сергей Озеров
Но это ведь только в двоичной системе так происходит? Если записать число в обычной десятичной форме, то число будет длинным, но зато проще обрабатывать его будет.
Сложность в данном случае - количество необходимых унарных операций для действий с вещественными числами в сравнении с такими же действиями в отношении целых чисел. Операции с целыми числами происходят практически мгновенно и на аппаратном уровне. Вещественные числа занимают больше ячеек памяти и требуют либо множества целочисленных операций на уровне процессора, либо пересылки в специальный вычислительный ускоритель и получения результата операции из него.
Упомянутая автором вопроса многоядерность тоже никаким боком никого не спасает, потому что все операции производятся последовательно.
Упомянутая автором вопроса многоядерность тоже никаким боком никого не спасает, потому что все операции производятся последовательно.
Попробуй вручную - без компьютеров и калькуляторов - от 1.2e10 отнять 3.4e-10 - может быть, тогда дойдёт.
Сергей Озеров
Что сложного? По циферке отнимай, и следи за нехваткой (переполнением). В десятках будут десятки а в сотнях сотни, в любом случае.
Сергей Озеров
Цифр то всего 9!А не 10.
Виталий Малиновский
Не показательный пример.
1.2e10 - 3.4e-10 почти всегда равен 1.2e10.
1.2e10 - 3.4e-10 почти всегда равен 1.2e10.
Потому что компьютер не работает с числами. Он работает с цепочками битов, в которые перекодируются числа, и кодировка чисел с плавающей точкой во много раз сложнее кодировки целых чисел, и операции, скажем, по их сложению поэтому тоже во много раз сложнее, так как прямое сложение битов, как это делается с целыми числами, в этом случае невозможно. Практически это сейчас не столь важно, как когда-то, так как для работы с числами с плавающей точкой в современных микропроцессорах стоит специальный вычислительный блок.
P.S. Чтобы стало понятно, в чем сложность операций с числами с плавающей точкой, ознакомься с тем, как они кодируются в памяти компьютера - это международный стандарт IEEE 754 -
http://www.softelectro.ru/ieee754.html
Просмотри хотя бы очень поверхностно этот стандарт и ты сразу поймешь :)
Говоря попросту, числа с плавающей точкой в компьютере - это не записи чисел, в которых в какой-то позиции стоит точка. Чтобы поместить в 4 или 8 байтов огромный диапазон чисел, для их записи применяется специальная очень сложная система счисления, в которой прямые операции сложения, вычитания, умножения и деления невозможны и для этих операций требуются очень сложные преобразования.
P.S. Чтобы стало понятно, в чем сложность операций с числами с плавающей точкой, ознакомься с тем, как они кодируются в памяти компьютера - это международный стандарт IEEE 754 -
http://www.softelectro.ru/ieee754.html
Просмотри хотя бы очень поверхностно этот стандарт и ты сразу поймешь :)
Говоря попросту, числа с плавающей точкой в компьютере - это не записи чисел, в которых в какой-то позиции стоит точка. Чтобы поместить в 4 или 8 байтов огромный диапазон чисел, для их записи применяется специальная очень сложная система счисления, в которой прямые операции сложения, вычитания, умножения и деления невозможны и для этих операций требуются очень сложные преобразования.
Сергей Озеров
В смысле говоря простым языком это из за системы счисления так происходит, столько гемора?
Сергей Озеров
Я же говорю что надо другую систему, эта слишком г*нная, она только укорачивает число транзисторов в памяти, а расчёты делать не умеет. Главное не количество, а качество в расчётах. Можно сгруппировать данные что их станет минимальное количество.
В вопросе не хватает ссылки на то, где это говорят и применительно к чему.
Сергей Озеров
где то на сайте нвидиа читал. Применительно к компьютерной графике.
Ну не зная о чем идет речь тяжело объяснить... Может там подразумевают не тяжесть вычислений, а тяжесть изготовления алу - который вычисляет. А может там подразумевают что в 3д игре используются сложные математические формулы для вычисления 3д модели... И не только игре... https://www.google.by/search?q=формулы+3д&oq=формулы+3д&es_sm=93&ie=UTF-8#q=линейная+алгебра+для+разработчиков
Похожие вопросы
- Assembler - Числа с плавающей точкой
- Представить заданные вещественные числа А и В в формате с плавающей точкой.
- Чем отличается целое и длинное целое число от двойного с плавающей точкой? и сколько в каждом из них цифр
- Представить вещественные числа в четырёхбайтовой ячейке памяти в формате с плавающей точкой.
- Ввод значений с плавающей точкой через запятую C++.
- Вычисление суммы с факториалом в С++?
- Как программировать задачи такого типа: вычисление неопределенного интеграла, нахождение собственных чисел матрицы....
- Текущая разница между Асинхронностью и параллельными вычислениями?
- Вычислить arth Есть ли формула для проверки правильности вычисления .и правильный ли код?
- Вычисление суммы ряда на c++