aspose file tools*
The moose likes Beginning Java and the fly likes Swapping two float values with no temp varaible Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "Swapping two float values with no temp varaible" Watch "Swapping two float values with no temp varaible" New topic
Author

Swapping two float values with no temp varaible

Manny Garcia
Greenhorn

Joined: Apr 04, 2007
Posts: 28
Hi,

I recently read the trick about swapping two int values with no temp variable (the XOR trick), but I discovered that that does not work with floats. Is there a way to swap two float variables with no temp variable?

Regards,

Manny
Andre Brito
Ranch Hand

Joined: Dec 13, 2007
Posts: 95

Hi.

Here's my code (mostraMensagem = showMessage).



Sorry for somethings, but it worked.


java Swapping
N1 = 3.14
N2 = 9.98

Swapping.........
N1 = 9.98
N2 = 3.1400003


Hope that my code helped you.
Paul Clapham
Bartender

Joined: Oct 14, 2005
Posts: 18909
    
    8

I don't have a specific counterexample but I am willing to bet that for sufficiently extreme values of the two floats (close to the maximum possible float value, close to the minimum possible float value, or so far apart in range that N1 + N2 = N1 and N2 <> 0) that doesn't work.

Actually, now that I reread your post, even the example you provided didn't work!
[ January 24, 2008: Message edited by: Paul Clapham ]
Rob Spoor
Sheriff

Joined: Oct 27, 2005
Posts: 19762
    
  20

Theoretically the following code will work for all numbers (the comments indicate the proof of correctness; A and B are the original values):

There is one small problem: floating point arithmetic will probably cause some small rounding errors when using with float and double.


Edit: this will probably work with one workaround, which gives you TWO temporary variables:

[ January 25, 2008: Message edited by: Rob Prime ]

SCJP 1.4 - SCJP 6 - SCWCD 5 - OCEEJBD 6
How To Ask Questions How To Answer Questions
Jim Yingst
Wanderer
Sheriff

Joined: Jan 30, 2000
Posts: 18671
This works without ever declaring any more variables:

Like Rob's last solution, it even handles values like Float.POSITIVE_INFINITY and Float.NaN, which Rob's original subtraction solution can't handle at all.

Still, this is a lot of work to do to avoid something as trivial as allocating an extra temp variable.


"I'm not back." - Bill Harding, Twister
ankur rathi
Ranch Hand

Joined: Oct 11, 2004
Posts: 3830
Originally posted by Jim Yingst:
Still, this is a lot of work to do to avoid something as trivial as allocating an extra temp variable.


These kinda tricks are asked in interviews, no use in real project.
Andre Brito
Ranch Hand

Joined: Dec 13, 2007
Posts: 95

Nobody read my post?
It worked!
Jim Yingst
Wanderer
Sheriff

Joined: Jan 30, 2000
Posts: 18671
We all read your post. It's a good technique, but as your output showed, and as Paul Clapham pointed out, it has roundoff errors. So now we are discussing ways to swap the exact values. Try swapping 0.0000001F and 1000000. Or swapping 1 and Float.POSITIVE_INFINITY.
Ulf Dittmer
Marshal

Joined: Mar 22, 2005
Posts: 42639
    
  65
Originally posted by ankur rathi:
These kinda tricks are asked in interviews, no use in real project.

I hope everybody knows enough to avoid companies that think that this sort of question is suitable for interviews.


Ping & DNS - my free Android networking tools app
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Swapping two float values with no temp varaible