以下のコードは、2つのベクトルの内積を計算するために使用されますが、間違った値を返すことがあり、その理由がわかりません。誰かがこの問題で私を助けることができますか?
特にこれらの入力の場合:[-2.328、-7.284、-1.214]および[-1.821、1.072、-2.94]
reduce(lambda x,y : x+y, [x*y for x,y in zip(self.coordinates, v.coordinates)])
私の推測では、これは丸め誤差です。あなたの例でベクトルを使用する:
a = [-2.328, -7.284, -1.214]
b = [-1.821, 1.072, -2.94]
c = reduce(lambda x,y : x+y, [x*y for x,y in zip(a, b)])
print(c)
-1.3322676295501878e-15
実際の結果はであるはずですが、与えます0
。比較のために、numpy関数np.inner(a,b)
は非常によく似た結果をもたらします。-1.33226762955e-15
。
このエラーは、2の正確な累乗から作成できない数値は、浮動小数点数として正確に表すことができず、概算する必要があるためです。より詳細な情報については、次を読むことができます。すべてのコンピューター科学者が浮動小数点演算について知っておくべきこと。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加