Ошибка переполнения VBA с типом double, Excel - PullRequest
0 голосов
/ 21 января 2012

Я не очень хорошо знаю ошибку переполнения, поэтому здесь я в растерянности.

Запись в VBA Я вызываю функцию VBA, которая является оберткой функции C ++ из dll (к которой у меня нет доступа к внутренностям).Функция VBA / C ++ возвращает значение типа double.Это производная оценка с использованием численных методов.

Какое-то время назад (но, возможно, оно ушло сейчас), я получал ошибку переполнения при попытке присвоить возврат функции переменной, объявленной как double. Но при остановке ошибки, я мог видеть правильное значение, назначенное для double, в окне localals (8.17 ...).И когда я вместо этого присваиваю функцию, возвращаемую варианту, я получаю то же значение без ошибок, вариант типа Variant / Double.

Есть идеи, что здесь может происходить?Я полностью потерян.Заранее спасибо за любые идеи.R

Редактировать: Еще одна вещь, которую я пытался применить CDbl к функции return при назначении ее варианту.Вот некоторый псевдокод, чтобы прояснить мои случаи:

Dim db as Double, va as Variant

db = DerivativeValue(a, b, c...) 

Это дает переполнение, но db имеет правильное значение в окне locals при ошибке.

va = DerivativeValue(a, b, c...)

Нет ошибок, то же значение.va типа Variant / Double

va = CDbl(DerivativeValue(a, b, c...))

Теперь снова переполнение.Я забыл, что va делал в окне Locals в этом случае, но, скорее всего, оно такое же, как в случае 1.

1 Ответ

0 голосов
/ 21 января 2012

Я предполагаю, что функция возвращает значение, которое выглядит как двойное, но не равно.

Варианты предназначены для принятия значений любого типа, и присвоение будет выполнять преобразования. Интересно, работает ли присвоение варианту, потому что оно может преобразовать возвращаемое значение в двойное.

Что произойдет, если вы попробуете следующее:

va = DerivativeValue(a,b,c...)
db = va

Если это сработает, это позволит вам продолжить разработку, не дожидаясь, чтобы узнать, что на самом деле возвращает функция.

Дополнительная точка. Двойное число - это 64-битное число с плавающей запятой. Если у вас есть FPU, он может возвращать 80-битное число с плавающей запятой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...