Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Странная реализация деления в std::complex 
V
    Опции темы
borisbn
Дата 22.1.2014, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Здравствуйте.

Сегодня рылся в исходниках STL в реализации Builder'а и нашёл такую штуку:

Код
 inline complex<double>& 
  complex<double>::operator/= (double rhs)  
  {
    double denom = rhs*rhs;
    double re    = (__re*rhs)/denom;
    double im    = (rhs*__im)/denom;
    __re         = re;
    __im         = im;
    return *this;
  }


Вопрос(ы):
1) Зачем понадобилось сначала получать квадрат rhs, а затем делить на него, умножив на rhs ? Почему не сделать просто (как в gcc)
Код
  template<typename _Tp>
    complex<_Tp>&
    complex<_Tp>::operator/=(const _Tp& __t)
    {
      _M_real /= __t;
      _M_imag /= __t;
      return *this;
    } 

?
2) Почему с re умножение идёт в порядке __re * rhs, а с im - наоборот ?

Спасибо.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
tzirechnoy
Дата 22.1.2014, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 2
Всего: 16



Скопировали из комплексного деления, видимо. Приравнять сомножытели с rhs.im к нулю -- догадались, сократить на rhs -- нет.

Можэт, правда, хотели bug-to-bug compatibility с делением на complex(rhs, 0) -- но это вряд ли. Странное это дело -- спецыально вкрячивать ошыбку.
PM MAIL   Вверх
akizelokro
Дата 23.1.2014, 02:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 1
Всего: 5



Стандартная формула так записывается (из учебника, где просто мнимая часть делителя = 0)

Почему не сделать как в gcc? Потому что есть формула расчёта комплексных чисел (да и вообще желательна чёткая типизация, раз понятно, что такое комплексные числа и какие на сегодняшний день есть варианты работы с ними). Если кто-нибудь придумает третий вид чисел и пойдёт их шпарить в таком делении,  будут интересные эффекты. 


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
borisbn
Дата 23.1.2014, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(tzirechnoy @  22.1.2014,  19:03 Найти цитируемый пост)
Скопировали из комплексного деления, видимо. Приравнять сомножытели с rhs.im к нулю -- догадались, сократить на rhs -- нет.

Блин... А точно...
Вот говорили мне: "Не ищи зебр, если видишь следы копыт"...
Я-то думал, что это нужно для какого-нибудь приведения степеней или ещё для чего-то подобного.
Спасибо за ответы.
Закрываю.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0439 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.