|
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;
|