У меня есть интересная проблема в G ++:
когда я использую sin (50 * 3,14 / 180), я получаю что-то около 0,766, однако sin (5/18 * 3,24) дает мне 0,000.
Разве это не одно и то же? Кто-нибудь заметил это раньше?
Заранее спасибо за ответ.
Это не имеет никакого отношения к Ubuntu, но...
Причина состоит в том что выражение 5/18*3.24
компилируется (в этом случае предварительно вычисленный, но увы, результатом является то же), как (5/18)*3.24
, и интерпретируемый слева направо.
Теперь, (5/18)
операция между двумя целыми числами и возвращает целочисленное деление между 5 и 18, который является 0 (с остатком 5, но Вы не попросили это). Когда Вы умножаетесь 0 и 3.14, операция смешана, таким образом, (int)0
продвинут на (double)0.0
и результат, ну, в общем, 0.0
- как ожидалось.
В другом случае, 50*3.14/180
, во-первых 50*3.14
вычисляется; (int)50
продвинут на (double)50.0
и все хорошо.
Мораль: всегда используйте правильный формат для констант. 5
средства (int)5
, 5.0
средства (double)5.0
, 5L
средства (long int)5
, 09
средства Вы не знаете C/C++...
PS как примечание стороны, это поведение является одним из больших изменений от python2 до python3. Ищите сеть from __future__ import division
если Вам любопытно.