RE: [SDK]Double to long in c++ ?

Date : Thu, 7 Jun 2007 13:13:56 -0400
To : <XSI(at)Softimage.COM>
From : "Luc-Eric Rousseau" <lucer(at)Softimage.COM>
Subject : RE: [SDK]Double to long in c++ ?
I perfer to use 0.25, because if you're rendering in fields in XSI the time will be 1.0, 1.5, 2.0,
2.5.  but in fact any small espilon number is fine


From: owner-xsi(at)Softimage.COM [mailto:owner-xsi(at)Softimage.COM] On Behalf Of Kim Aldis
Posted At: Thursday, June 07, 2007 1:07 PM
Posted To: xsi
Conversation: [SDK]Double to long in c++ ?
Subject: RE: [SDK]Double to long in c++ ?

Shouldn’t that be 0.5, not 0.25?

 

From: owner-xsi(at)Softimage.COM [mailto:owner-xsi(at)Softimage.COM] On Behalf Of Luc-Eric Rousseau
Sent: 07 June 2007 02:10
To: XSI(at)Softimage.COM
Subject: RE: [SDK]Double to long in c++ ?

 

these additionnal casts are not necessary because the entire _expression_ is being promoted to 'double' already, and you do need my +0.25 epsilon to control the truncation that hapens with the cast to 'long'

 


From: owner-xsi(at)Softimage.COM [mailto:owner-xsi(at)Softimage.COM] On Behalf Of Wessam Al-Bahnasi
Posted At: Thursday, June 07, 2007 12:03 AM
Posted To: xsi
Conversation: [SDK]Double to long in c++ ?
Subject: RE: [SDK]Double to long in c++ ?

Or better yet:

 

double t = (double)T + (double)oOffset;
long id = (long)(t * 3.0 * (double)nbPoints);

 

Wessam Bahnassi

Microsoft DirectX MVP,

Programmer

Electronic Arts

--

'Talk is cheap because supply exceeds demand'

 

From: owner-xsi(at)Softimage.COM [mailto:owner-xsi(at)Softimage.COM] On Behalf Of Luc-Eric Rousseau
Sent: Wednesday, June 06, 2007 3:31 PM
To: XSI(at)Softimage.COM
Subject: RE: [SDK]Double to long in c++ ?

 

I don't really know the answer to your question, so I appologize if this is wrong, but the cast operator has higher precedence than the multiply. so it's going to take that 't', cast it to a long, and do the rest in longs.

I think you wanted to have another set of parenthesis like (long)(t*3*nbPoints)

 

in any case,

casting a double to long just like that is not a good idea, you should add an epsilon to compensate for any numerical innacuracies.

For example  :  long id = (long)(t*3*nbPoints + 0.25);

 


From: owner-xsi(at)Softimage.COM [mailto:owner-xsi(at)Softimage.COM] On Behalf Of Ahmidou Lyazidi
Posted At: Wednesday, June 06, 2007 3:20 PM
Posted To: xsi
Conversation: [SDK]Double to long in c++ ?
Subject: [SDK]Double to long in c++ ?

Hi
In an Operator,we are trying to convert the datas passed by OperatorContex.GetTime to a long.The thing that is strange is when I log the value
it seems good, but when I mutiply it with a fixed value it seems to round it and give me 2 equal values for 2 differant frame
here is the code and the log:

long oOffset = oOp.GetParameterValue(L"TimeOffset");

CTime T = ctxt.GetTime();
Application().LogMessage(L"Current operator Time " + T.GetAsText());

double t = double(T) + oOffset;
long id = (long) t * 3 * nbPoints;


Search the XSI List archives here or use the advanced search form to search across mailing lists. Searching help is available.
This site supposedly brought to you by Benjamin Grosser and the Imaging Technology Group.