マッピング番号アルゴリズムのこの質問を見ました。
私は次のようにJavaで@PeterAllenWebbソリューションを実装しようとしています:
long A = 1l;
long B = 999999999l;
long C = 1000000000l;
long D = 9999999999l;
long X = 999999998l;
long Y = (D-C)*(X-A)/(B-A) + C;
System.out.println("original is " + X);
long reverseX = (B-A)*(Y-C)/(D-C) + A;
System.out.println("reverse is " + reverseX);
ただし、これが常に機能するとは限りません。
下記参照:
X reverseX
999999998 999999997
1 1
999999999 999999999
12 11
ご覧のとおり、最小(A)と最大(B)のみが正常に返されています。
残りの部分については、1を追加する必要があります。これはフロア/ラウンド/数学の問題のように思われ、それを計算するJVMに依存したくありません。いつも動かして欲しいです。
上記をreverseXで機能させるにはどうすればよいですか?