Boost logo

Boost :

Subject: Re: [boost] Boost.Convert. Take 2.
From: alex (alexhighviz_at_[hidden])
Date: 2014-02-21 12:21:12


>-----Original Message-----
>From: Boost [mailto:boost-bounces_at_[hidden]] On Behalf Of Rob Stewart
>Sent: 21 February 2014 15:35
>To: boost_at_[hidden]
>Subject: Re: [boost] Boost.Convert. Take 2.
>
>On February 21, 2014 5:48:32 AM EST, alex <alexhighviz_at_[hidden]>
>wrote:
>>
>>
>>>>All loops are actually like
>>>>
>>>>for (int k = 0; k < local::num_cycles; ++k)
>>>>{
>>>> int k = boost::convert<int>::from("12345", ccnv).value();
>>>> BOOST_ASSERT(k == 12345);
>>>>}
>>>>
>>>>Do you think there still might be something I missed?
>>>
>>>The assertion won't help in an optimized build, of course. Save the
>>values and
>>>print them at the end, after you've captured the elapsed times.
>>>
>>
>>Isn't it also a problem that the inside of the loop doesn't vary? A
>>smart
>>compiler may decide to evaluate boost::convert<int>::from("12345",
>>ccnv).value() only once and re-use the result?
>
>Of course, yes. I should have noticed that. Incrementing a value each
iteration
>and printing that value at the end should work. Overflow isn't important.
Just
>using the final value in an opaque way will prevent optimizing away the
>conversions in the loops.
>
>
That seems easier said than done, because it is the value of a string that
needs to be unpredictable?

int sum = 0;
for (int k = 0; k < local::num_cycles; ++k)
{
    char str[] = "12345";
    str[4 - k % 5] = 49 + k % 9; //because the char '1' has value 49
    sum += boost::convert<int>::from(str, ccnv).value();
}
std::cout << sum;
 


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk