Особенности платформы
Это зависит от платформы, используемой для вычисления с плавающей точкой. С x87 FPU преобразование бесплатное, так как содержимое регистра такое же - единственная цена, которую вы иногда можете заплатить, это трафик памяти, но во многих случаях даже нет трафика, так как вы можете просто использовать значение без какого-либо преобразования. x87 на самом деле странный зверь в этом отношении - трудно правильно различить числа с плавающей запятой и двойники на нем, поскольку используемые инструкции и регистры одинаковы, отличаются то, что являются инструкциями загрузки / сохранения, а сама точность вычислений контролируется с помощью битов состояния , Использование смешанных вычислений с плавающей запятой / двойных может привести к непредвиденным результатам (и из-за этого есть опции командной строки компилятора для управления точным поведением и стратегиями оптимизации).
Когда вы используете SSE (а иногда Visual Studio использует SSE по умолчанию), оно может отличаться, так как вам может потребоваться передать значение в регистрах FPU или сделать что-то явное для выполнения преобразования.
Экономия памяти
В качестве резюме и ответа на ваш комментарий в другом месте: если вы хотите сохранить результаты плавающих вычислений в хранилище 32b, результат будет такой же скорости или быстрее, потому что:
- Если вы сделаете это на x87, преобразование будет бесплатным - единственная разница будет в том, что вместо fstp qword будет использоваться fstp dword [].
- Если вы сделаете это с включенным SSE, вы можете даже увидеть некоторое повышение производительности, так как некоторые вычисления с плавающей запятой могут быть выполнены с SSE, если точность вычислений равна только плавающей запятой вместо значения по умолчанию double.
- Во всех случаях трафик памяти ниже