>This challenge was inspired by a programming blog I frequent. Please see the original post here: [A Programming Puzzle](http://programmingpraxis.com/2013/06/28/a-programming-puzzle/)

---

# Challenge #
Define a function `f:Q->Q` such that `f(f(n)) = -n` for all non-zero integers `n`, and where`Q` is the set of rational numbers.

# Details #
In whatever language you prefer, please define **one** function or program `f` that accepts as parameter **one** number `n` and returns or outputs **one** number `f(n)`. 

Input may be provided through whichever mechanism is most natural for your language: function argument, read from STDIN, command-line argument, stack position, voice input, gang signs, etc. 

Output should be a return value from a function/program or printed to STDOUT.

I would like to restrict answers to functions that do not take advantage of program state or global memory/data that is visible from outside of the function `f`. For example, keeping a counter outside of `f` that counts how many times `f` was called and just doing a negation based on this count isn't very challenging or interesting for anyone. The decisions `f` makes should rely only on data within `f`'s lexical scope.

However, this restriction is probably inappropriate for some stack-oriented languages or other types of languages that do not distinguish these types of data or scopes. Please use your best judgement to keep with the spirit of this challenge.

---

# Scoring #
Common code golf rules apply- your score is the number of **bytes** in your source code.

The minimal answer requires the domain and codomain of `f` to be a subset of the rationals `Q`. If you restrict your domain and codomain of `f` to the integers `Z`, then your score is the ceiling of 90% of the number of **bytes** in your source code.

# Tiebreak #
In the event of a tie, the following will be used in order:

1. Fewest number of printable non-whitespace **symbols** in your source code
2. Earliest date and time of answer submission

---

### Edit ###
You are not required to support arbitrarily sized numbers. Please interpret the sets `Z` and `Q` as datatypes in your chosen language (typically integer and floating point, respectively).

If your solution relies entirely on the underlying structure or bit pattern of a data type, please describe its limitations and how it is being used.