[ADOL-C] result seems to differ for double and adouble

Nozomu Tomita layers.of.unitcells at gmail.com
Mon Aug 12 01:35:56 EDT 2013


Dear all,

Thank you for the quick reply.
I tried valgrind, but (if my usage is correct) it found no error.
(as I didn't use "new" or "[]" operator, I guess this is not from memory handling in this code)

I could reduce my previous code...: http://pastebin.ca/2430872 ,
and its output is this: http://pastebin.ca/2430873 .

This code does a multiplication with a template class "wrap", for double and adouble.
Line 15-18 of the output corresponds to line 25-34 of the source, with D == adouble.
Here a and b changes after multiplication, in spite of its type "wrap<const adouble>"
(consequently its member is of type "const adouble").

In this output the results (A's) are not different for double and adouble,
but it will differ if a or b is used in calculation.

"make_pair(-A,-A)" at line 32 of the source may be important, because replacing it to
e.g. "make_pair(A,-A)" or "make_pair(-A,A)" changes output.

About valgrind, on Fedora on virtual machine (as I couldn't make valgrind work in Mac and Debian), with
$ valgrind -v ./a.out
outputted this: http://pastebin.ca/2430874

I got the same result in previous two environments and on Fedora above.

Thank you,
Tomita

On 2013/08/12, at 0:12, Norman Goldstein <normvcr at telus.net> wrote:

> Perhaps running a memory checker, such as valgrind on linux, would be insightful?
> 
> 
> On 08/11/2013 12:55 AM, Nozomu Tomita wrote:
>> Dear all,
>> 
>> I'm writing 3-dimensional geometrical calculation, such as how long a line penetrates a box,
>> with templated class.
>> 
>> The problem is that my templated function returns different results for double and adouble,
>> and "const adouble" quantities seem to change in the middle of calculation.
>> 
>> I'm sorry for the mess of source code, but I couldn't pick out the exact place that harms...
>> 
>> My code http://pastebin.ca/2430586 is meant to do an identical calculation for both double and adouble,
>> checking whether a line that is parallel to z-axis and on (1/2, 1/2, 0), penetrates
>> a square (0,0,0)-(1,0,0)-(1,1,0)-(0,1,0).
>> 
>> That returns correctly true for double, but false for adouble.
>> Compiling this with -DDEBUG produces this output: http://pastebin.ca/2430588
>> 
>> Line 55 - 67 of this output correspond to line 173 - 216 of source with template argument Real==adouble.
>> The Odd thing is that although X and u (and its members) are declared as const,
>> they change during calculation, from line 57 (u == vector3(0(a), 0(a), 1(a)))
>> and line 59 (u == vector3(0(a), 0(a), 0(a))).
>> 
>> 
>> I tested this result for ADOL-C 2.4.1 in two environments:
>> * Debian 6.0.1,
>>  with g++ (Debian 4.4.5-8) 4.4.5
>> * MacOS X 10.8.4,
>>  with g++ i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)
>> 
>> 
>> Thank you!
>> 
>> Tomita
>> _______________________________________________
>> ADOL-C mailing list
>> ADOL-C at list.coin-or.org
>> http://list.coin-or.org/mailman/listinfo/adol-c
>> 
> 
> 
> _______________________________________________
> ADOL-C mailing list
> ADOL-C at list.coin-or.org
> http://list.coin-or.org/mailman/listinfo/adol-c




More information about the ADOL-C mailing list