Здравствуйте, Erop, Вы писали:
E>AFAIK сейчас таких реализаций, которые несовместимы с представлением как пара double не бывает. Но никто не мешает им быть...
E>Ну а про фиг там или не фиг, так это я про то, что на платформе комплексное число может быть представлено как-то так, что поля "вещественная часть" может и не быть в явном виде.
E>Вдруг, например, порядки будут храниться в такой реализиции отдельно, а мантисы отдельно?
Даже если предположить существование аппаратной платформы, поддерживающей на уровне железа работу с комплексными числами, и даже ежели представление у них не декартово, я не вижу ни каких преимуществ текущей реализации перед реализацией с двумя перегруженными методами, как я предлагал выше, особенно если учесть, что класс и функции окружения разрабатывались именно для работы с декартовым представлением.
E>>>Хотя, стоит, ИМХО, попробовать во что таки компилируется E>>>template<typename T> set_imag( std::complex<T>& dst, T imag )
E>>>{
E>>> dst = std::complex( dst.real(), imag );
E>>>}
E>>>Очень может быть, что оно хорошо компилируется и real часть не переписывает лишний раз...
MAS>>Что-то мне подсказывает что врядли, однако лезть в получивший ся бинарь счас не очень хочется. Может когда времени будет побольше посмотрю, что из этого безобразия получается.
E>Ну в целом можешь подумать во что это таки скомпилируется...
E>ИМХО во что-то типа такого:
E>[псевдокод]
E>загрузить в регистр 1 из dst.re
E>загрузить в регистр 2 из imag
E>записать из регистра 1 в dst.re
E>записать из регистра 2 в dst.im
E>[/псевдокод]
E>Казалось бы, не такая уж нереальная задачка для оптимизатора выбросить выделенные строки...
Это все гадание на кофейной гуще, и очень сильно зависит от оптимизатора и целевой платформы. Чего бы мне как раз не хотелось.