Да, результат в примере (1) может легко переполниться, если, скажем, v1 = 1000000000000000 и v2 = 1. Вам не нужен LL для этой константы, потому что он достаточно мал, чтобы поместиться в int
( в большинстве случаев, в любом случае).
(2) Это может переполниться так же, как в примере 1, если v1 и v2 такие, как я их дал.
Первый пример более дорогой, так как арифметика с плавающей запятой дороже, чем целочисленная арифметика.
(3) Число с плавающей точкой, безусловно, может быть переполнено, и последствия зависят от реализации.
Как указал Арджит, вы можете предотвратить переполнение, проверив значение v1 перед выполнением расчета. Если v1 может быть отрицательным, вам также необходимо проверить отрицательную версию, и, возможно, следующее может быть лучше ...
if ((LONG_LONG_MAX / 1000000) > V1)
{
...
}
Если вы действительно не вписываетесь в лимит, вы можете увеличить свой запас, объявив переменные unsigned
.
Позже - отредактируйте, чтобы исправить ошибку, указанную Арджитом.