3
4

3 に答える 3

7

コメントから:

いいえ、OpenMP は、整数演算による OpenMP ループに関する質問に対するこの回答と同じ理由で、これを行いません。コンパイラが浮動小数点数について推論することは非常に困難です。特に、コンパイラはループに入る前にループのトリップカウントを知る必要があり、ループ内の浮動小数点演算により、いくつかの単純なケースがある場合でも、一般的に非常に困難になります。それは問題ありません (たとえば、0.5 から 10.0 までループします)。

同じ理由で、この形式のループの純粋なシリアル最適化/ベクトル化でも問題が発生します。これを行う最善の方法は、同等の整数ループを作成し、整数インデックスに基づいて float を計算することです。

for (int i=0; i<100; i++) { 
    double x=0.1*i; 
    sum += x*x; 
}
于 2013-01-21T13:51:08.230 に答える
0

より一般的には、 What Every Computer Scientist Should Know About Floating-Point Arithmeticを読む必要があります。0.1 を追加して正確な結果を期待しているという事実は、まだそれを読んでいないことを示唆しています :-)

于 2013-01-20T21:08:03.907 に答える