Двойная операция C++ дает разный результат в разных условиях
доброе утро,
Я разработал библиотеку DLL Vc++, вызванную программой VB. DLL имеет функцию, которая выполняет некоторую операцию над векторами точек (double[3])
теперь предположим, что у нас есть два набора точек S, T.
Если программа Vb вызывает функцию только один раз с набором точек T, я получаю результат.
Если программа Vb вызывает функцию два раза, сначала с набором S, а затем с набором T, то результат для набора T отличается от предыдущего.
Я пытаюсь отладить, и разница - это продукт двух двойников, которые действуют по-разному.
У меня есть два двойных dx и dy и эта функция работает:
dx2 = dx*dx
dy2 = dy*dy
с помощью отладочных строк я получаю:
если я звоню только Set T я получаю
[2920]point 10--> dx: 32951.71011630935400000000 dy: 1784.60091076856500000000 dx2: 1085815199.58928420000000000000 dy2:3184800.41071599160000000000 A:1089000000.00000020000000000000 B:0.00065903420232618713 C:-272250000.00000000000000000000
со звонком с набором т после звонка с установить s:
[2920]<pre>point 10--> dx: 32951.71011630935400000000 dy: 1784.60091076856500000000 dx2: 1085815199.58928390000000000000 dy2:3184800.41071599160000000000 A:1089000000.00000000000000000000 B:0.00065903420232618702 C:-272250000.00000000000000000000
как вы можете видеть, dx одинаков для обоих вызовов, но resut dx2 отличается.
в конечном результате разница накапливается для всех точек, и я получаю слегка различное значение.
Кто-нибудь имеет представление о том, что здесь происходит?
Кажется, что после первого вызова функция находится в другом состоянии, но как это может повлиять на продукт с теми же операндами?
спасибо
Что я уже пробовал:
Я попытался проверить, нет ли утечки памяти, но не увидел ничего странного.
Kornfeld Eliyahu Peter
Возможно, у вас есть какие-то глобальные переменные для хранения состояния?
Просмотр вашего кода может помочь нам помочь вам...
Richard MacCutchan
Не видя вашего кода, трудно догадаться, что происходит.