- 1
Point3D& operator /= (const float f) { x/=f; y/=f; z/=f; return *this; }
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+3
Point3D& operator /= (const float f) { x/=f; y/=f; z/=f; return *this; }
ебать я лох
https://ideone.com/KIDRbI
с каких крестов так писать можно? - в смысле `x(x)` - потому что раньше компилеры "путались" где было поле, где был аргумент к'тора.
и более того, компилер вместо того, чтобы поругаться, просто инициализировал пустое поле самим собой
вот только не помню, это были проблемы гцц 3.х или вижуалстудии -05/-08
если сидишь на долгосрочных проектах с относительно старыми тул-чейнами, то совсем не обязательно что бы оно было "давно".
MSVC 9.0 — Ok.
Борманд C++ 5.5 — Ok.
Open Watcom C++ 1.9 — Ok.
Digital Mars 8.42 — Ok (если удалить неймспейсы).
g++ -std=c++98 (версия 4.8.1) — Ok.
Даже не знаю, какое бы старое говно потестировать...
x*=a;
y*=a;
z*=a;
x*=a;
y*=(a/x)*x;
z*=((a/x)*x + (a/y)*y)/2.;
Так лучше.
(a + b)² = a² + 2ab + b²;
(a - b)² = a² - 2ab + b²;
____________________
(a + b)² - (a - b)² = 4ab.
Следовательно, ab = [(a + b)² - (a - b)²]/4. Разумеется, смысл есть, если на какой-то платформе возведение в квадрат считается быстрее, чем умножение (например, таблица квадратов уже посчитана).
Тогда x *= a заменяем на x = pow((x + a)/2, 2) - pow((x - a)/2, 2);
+1...