鍋あり谷あり

テーマを決めずに適当に書いています。

二回適用すると符号が反転する関数の、インチキ臭くない実装

というわけで、問題。

以下の仕様を満たす関数 f を実装せよ。

  1. f は、浮動小数点型を引数にし、浮動小数点型の値を返す
  2. x が有限の実数の時、f(f(x))-x がゼロになる。
  3. x が有限の実数の時、f(x) は、有限の実数になる。

ただし、少なくとも x が以下の値の時に f(f(x))-x がゼロになることを確認すること:

  • 0, -1, 1
  • その処理系で扱える最大の値, 最小の値,
  • その処理系で扱える 0 を超える最小の値、0 を超えない最大の値
  • その処理系で扱える 1 を超える最小の値, 1 を超えない最小の値

C言語で実装するなら先ほど書いたインチキ臭いバージョンでも OK なんだが、その手が使えない処理系ではどうすればいいかというのがこの問題の趣旨。
tainted? や Array.pack を使わないで ruby で書いたバージョンが一応手元にあり、解けているつもり。

#写真と本文は関係ありません。