C#、.netに基づいています
サーバーは 64 ビット マシンで、クライアントは 32 ビット マシンで、double[] 配列がクライアントに送信されます。クライアントでは、このデータを使用してバイナリファイルが作成されます。
サーバーが 64 ビットでクライアントが 32 ビットであるため、doule 値が破損する可能性はありますか。
C#、.netに基づいています
サーバーは 64 ビット マシンで、クライアントは 32 ビット マシンで、double[] 配列がクライアントに送信されます。クライアントでは、このデータを使用してバイナリファイルが作成されます。
サーバーが 64 ビットでクライアントが 32 ビットであるため、doule 値が破損する可能性はありますか。
いいえ、.NET が送信と受信の両方を行っている場合は違います。
また、送受信の方法によっても異なります。TCP はストリーム ベースです。つまりsocket.Send()
、単一のsocket.Receive()
.
次の記事は、使用しているシステム(32ビットまたは64ビット)によって精度が影響を受ける例を示しています。
例を提供する抜粋:
さらに、Double値を使用した算術演算と代入演算の結果は、Doubleタイプの精度が失われるため、プラットフォームによってわずかに異なる場合があります。たとえば、リテラルのDouble値を割り当てた結果は、.NETFrameworkの32ビットバージョンと64ビットバージョンで異なる場合があります。次の例は、リテラル値-4.42330604244772E-305と値が-4.42330604244772E-305の変数がDouble変数に割り当てられている場合のこの違いを示しています。この場合のParse(String)メソッドの結果は、精度の低下に悩まされないことに注意してください。
サーバー上のアプリケーションのターゲットプラットフォームをx86に設定することをお勧めします。これは私の理解です(間違っている場合は訂正してください)。これにより、実際に実行しているものに関係なく、精度が32ビットマシンと同等になります。