2015-07-22 95 views
-1

假設嚴格不等式一個X,和ÿ是正IEEE浮點數與 X < ÿ。證明一個 × X < 一個 × ý其中× 表示浮點乘法舍入到最接近的。爲浮點乘法

天真,你可能認爲對於一些一個X接近Ÿ, 你會得到一個 × X = 一個 × ÿ。事實證明,這個 不可能發生(只要非規格化的數字,infinities和NaN排除在 之外)。

我對一個優雅的證明感興趣,如果可能的話,還有一本書或紙 這裏給出。

TAKE 2:正如Pascal Cuoq的回覆所示,以上聲明爲 false。 = 1的限制版本如何?這裏是 聲明予以證明:

假設一個X是積極的IEEE浮點數與 X < 1.證明一個 × X < 一個其中× 表示浮點乘法舍入到最近。

+0

由於無窮大可以積極的IEEE我不確定這樣的證明是可能的。你是否想排除無限? https://en.wikipedia.org/wiki/IEEE_754-1985 – CandiedOrange

+0

是的,謝謝你指出這一點。我編輯了這個問題來排除infinities和NaN以及非規範化的數字。 – cffk

+1

如果你想改變你的問題,一般的建議是問一個新的問題。 PS:我相信你感興趣的新財產是真實的。 –

回答

1

爲了把一個正式證明你的修訂問題(以稍微改變語言):

假設axx < 1積極IEEE浮點數。證明[ax] < a其中[]表示默認的浮點舍入。

WLOG,讓a[1, 2)。如果a1,那麼聲明是非常正確的,所以我們實際上只需要在(1,2)中考慮ax < 1意味着x <= 1 - u/2,其中u = ulp(1) = ulp(a)。我們有:

ax <= a - au/2 

我們也有a > 1,所以au/2 > u/2,所以:

ax <= a - au/2 < a - u/2 

因爲ax一半以上低於a的ULP,[ax] < a

+0

謝謝。這個結果的一個必然結果是,將數字連續乘以(1 - u/2)向下遊遍所有浮點數(直到達到最小標準化數)。此外(?)除以(1 - u/2)在相反方向行進。 – cffk

+1

@cffk「通過所有」no。 –

+0

僅解決x =(1 - u/2)的耦合問題。我們知道 ax cffk

6

的屬性是假的,如由下面的C99程序當與編譯器爲doubleFLT_EVAL_METHOD = 0提供IEEE binary64編譯:

#include <stdio.h> 
#include <math.h> 
#include <float.h> 

int main(void) { 
    double z = 1.0; 
    double y = nextafter(z, 0.0); 
    double x = nextafter(y, 0.0); 
    double a = 1.0 + 2 * DBL_EPSILON; 

    printf("%a %a\n", a*x, a*y); 
} 

結果:

0x1.0000000000001p+0 0x1.0000000000001p+0 

y的前身1.0,x的前身ya的繼任者1.0。 xy的值在他們的binade的頂部,其中相對精度最好,並且a*xa*y的值在他們的底部,其中相對精度最差。這是如何a*xa*y四捨五入到相同的值。

在有關財產,因爲一個反例只能xy由單一的ULP和a乘法把他們的目的地binade相比相對較低,他們在原籍binade分離發生看起來如此。

+0

你是不是指''''是'y'的*前輩*? – njuffa

+0

@njuffa是的,在我喝咖啡之前,我不應該回答這個問題。 –

+0

這是一個我非常熟悉的問題:-) – njuffa