Я предполагаю, что компилятору сначала нужно округлить результат от "A + B * D" до целого числа, потому что вы сохраняете результат в поле int. В общем, у вас конфликт типов данных.
И A, и B по-прежнему являются действительными числами для long long int, длина которого составляет 8 байтов. Вы можете даже умножить их на 1.000 и при этом иметь действительные значения long long int. В некоторых других языках он также известен как int64.
Однако значение типа double также 64-битное, но часть из них используется как показатель степени. Когда вы умножаете double на int64, результатом будет еще один double. Добавление другого int64 к нему все еще сохраняет его двойным. Затем вы снова присваиваете результат для int64 без использования определенного метода округления. Меня не удивит, если для этого компилятор будет использовать 4-битную функцию округления. Я даже поражен, что компилятор не вырвет и не нарушит это утверждение!
В любом случае, при использовании таких больших чисел необходимо соблюдать особую осторожность при смешивании разных типов.