2017-07-31 15 views
0

入力は以下の関数でID(1ul剰余)に縮小されますか?反転時にdouble値が閉じられる

public static double invertTwice(double value) { 
    double inverse = 1.0/value; 
    return 1.0/inverse; 
} 

また、関数はアイデンティティ(モジュロ1 ULP)であるため、最大間隔[min, max]は何ですか?

[1E-320 ... 1E-310]の範囲の値は、反転するとどのように+ Infinityにマッピングされますか? (!0.0になり、その後反転)

動機づけ:場合でもb != 0.0一般的な関係

a/b == a * (1.0/b) 

インスタンスa = 0.0b = 4.9E-324ために、すべての二重ペアの成り立ちません。

このベクトルを正規化する際に考慮しなければならない、例えば

[0.0 b 0.0] * (1.0/b) == [NaN Infinity NaN] 

しかし

[0.0/b b/b 0.0/b] == [0.0 1.0 0.0] 

備考:私の質問は、ベクトルを正規化に関するものではありませんが、私は上記の書いたものについて。ありがとうございました! // stackoverflowの:二分探索を使用して

+0

であることがわかっは、[この質問](HTTPSに似て聞こえます。 com/questions/44623331/do-a-floating-point-reciprocal-always-round-trip/44626041#44626041)。 'invertTwice'関数は、間隔[1.0、sqrt(2)]上のアイデンティティであり、アンダーフローとオーバーフローが与えられた場合、その間隔を2の累乗でスケーリングした結果は避けられます。 '' sqrt(2)、2.0) 'では、' 'sqrt(2)'に近い値がIDを与え、 '2.0'に近い値は' '確率 '' 0.5でIDを与えます。 –

+0

ポインタと部分的な答えをありがとう。 [1e-323 ... 1e-310]の範囲の値は、すべて逆になるとInfinityにどのようにマップされますか? (私はJavaを使用しています) – datahaki

+0

最大表現可能なIEEE 754倍精度浮動小数点数は約1.8e308なので、約5.56e-309より小さいものはその逆数が表現可能な最大浮動小数点数よりも大きいので、無限大に丸めます。 –

答えて

0

、私は2倍反転の下に不変であるdouble値の間隔

value == 1.0/(1.0/value) 

[5.562684646268010E-309 ... 1.7976931348623151E308] 
関連する問題