По какой-то причине следующий оператор оценивается как нуль. Я предполагаю, что это связано с переполнением, но все промежуточные значения, похоже, находятся в пределах двойного значения.
DiffieHellmanKey = (43 ^ 47) - (53 * Fix((43 ^ 47) / 53))
Я думаю, что это переполнение, потому что когда я выполняю его с разными числами (ниже), это приводит к правильному значению 29.
DiffieHellmanKey = (5 ^ 22) - (53 * Fix((5 ^ 22) / 53))
Что дает? Теперь вернемся к исходным числам, которые дают мне переполнение. Все задействованные переменные являются двойными. Это даже не работает, если я вычисляю его как формулу рабочего листа, а не в VBA:
=(43 ^ 47) - (53 * ROUNDDOWN(((43 ^ 47) / 53), 0))
И если я реализую приведенный выше пример в VBA, используя эквивалентную форму (ниже), я получаю неверный результат -1,75357E+62.
DiffieHellmanKey = (43 ^ 47) - (53 * WorksheetFunction.RoundDown(((43 ^ 47) / 53), 0))