View Full Version : Problems negating a number

reppig

10-18-2011, 07:05 PM

When I run the following code cos_lon evaluates correctly to 0.1618761.

However, neg_cos_lon evaluates to -27.27986 not -0.1618761 which is what I want??

I also tried what was in the manual -neg_cos_lon and I got the same wrong answer.

cos_lon := f.Cos(f.Radians(gs_lon))

neg_cos_lon := -cos_lon

DBG.Str(FS.FloatToString(cos_lon))

DBG.Str(STRING(" "))

DBG.Str(FS.FloatToString(neg_cos_lon))

Phil Pilgrim (PhiPi)

10-18-2011, 07:10 PM

You're negating cos_lon, a floating-point number, in the integer domain. That does not work. You need to negate it (or subtract it from 0.0) using a floating-point method.

-Phil

Bobb Fwed

10-18-2011, 07:44 PM

Or just flip bit 31?

Like:

neg_cos_lon := cos_lon ^ $8000_0000

Much faster than a floating point operation, and I can't think of a scenario where it would give you incorrect results (though I'm no expert on floating point).

reppig

10-18-2011, 08:09 PM

I understand what you are saying and it makes sense. The manual implied it just changed the sign of a number. So, should I assume everything the manual says only apply to integers??

reppig

10-18-2011, 08:10 PM

I will give it a try tommorrow. Thanks.

Or just flip bit 31?

Like:

neg_cos_lon := cos_lon ^ $8000_0000

Much faster than a floating point operation, and I can't think of a scenario where it would give you incorrect results (though I'm no expert on floating point).

reppig

10-18-2011, 08:11 PM

I understand what you are saying and it makes sense. The manual implied it just changed the sign of a number. So, should I assume everything the manual says only apply to integers??

You're negating cos_lon, a floating-point number, in the integer domain. That does not work. You need to negate it (or subtract it from 0.0) using a floating-point method.

-Phil

Phil Pilgrim (PhiPi)

10-18-2011, 08:14 PM

The manual implied it just changed the sign of a number. So, should I assume everything the manual says only apply to integers??

As it pertains to native Spin operations, yes.

-Phil

Bobb Fwed

10-18-2011, 08:33 PM

The manual implied it just changed the sign of a number. So, should I assume everything the manual says only apply to integers??

As already said, yes, everything is assumed as integers.

The problem with negating a float, when it thinks it is a integer is because the bit structure for an integer of negative and positive 5 (for example) is completely different from each other (%11111111111111111111111111111011 vs %00000000000000000000000000000101), most of the bits get changed. Where as a floating point number, the difference is very simple (%11000000101100011100001010010000 vs %01000000101100011100001010010000), just bit 31 changes.