タグ付けされた質問 「floating-point」

9
浮動小数点の非決定論に直面して決定論的ゲームはどのように可能ですか?
ネットワーク化されたRTSのようなゲームを作成するために、ここでゲームを完全に決定論的にすることを提案する多くの回答を見ました。次に、ユーザーのアクションを相互に転送するだけで、次のフレームがレンダリングされる前にすべてのユーザーの入力を「ロック」するために、表示されているものを少し遅らせるだけで済みます。その場合、ユニットの位置、ヘルスなどのようなものは、ネットワーク上で常に更新される必要はありません。すべてのプレイヤーのシミュレーションはまったく同じだからです。また、リプレイを行うために提案された同じことを聞いたことがあります。 ただし、浮動小数点の計算はマシン間、または同じマシン上の同じプログラムの異なるコンパイル間でも非決定的であるため、これは本当に可能ですか?その事実が、ゲーム全体に波及するプレイヤー(またはリプレイ)間の小さな違いを引き起こすのをどのように防ぐのでしょうか? 一部の人々は、浮動小数点数を完全に避けint、分数の商を表すために使用することを提案することを聞いたことがありますが、それは私には実用的ではありません-たとえば、角度の余弦を取る必要がある場合はどうなりますか?数学ライブラリ全体を真剣に書き直す必要がありますか? 私は主にC#に興味があることに注意してください。私が知る限り、この点ではC ++とまったく同じ問題があります。

8
決定論的な物理シミュレーションを実行するにはどうすればよいですか?
私は、プレイヤーがパズルやマップを解くためにピースやパーツを動かす剛体を含む物理ゲームを作成しています。ゲームの非常に重要な側面は、プレイヤーがシミュレーションを開始すると、オペレーティングシステム、プロセッサなどに関係なく、どこでも同じように実行されることです。 多くの複雑さの余地があり、シミュレーションが長時間実行される可能性があるため、物理エンジンがその浮動小数点演算に関して完全に決定的であることが重要です。別の「失敗」。 ゲームでこの決定論を実現するにはどうすればよいですか?Javascript、C ++、Java、Python、C#など、さまざまなフレームワークと言語を使用したいと思っています。 Box2D(C ++)と他の言語の同等物に惹かれましたが、それは私のニーズを満たすようですが、特に三角関数の場合、浮動小数点の決定論に欠けています。 私が今まで見た中で最良の選択肢は、Box2DのJava同等物(JBox2D)です。多くの操作でStrictMathはなく浮動小数点の決定論を試みているMathようですが、ゲームをまだ作成していないので、このエンジンが必要なすべてを保証するかどうかは不明です。 ニーズに合わせて既存のエンジンを使用または変更することはできますか?または、自分でエンジンを構築する必要がありますか? 編集:誰かがそのような精度を必要とする理由を気にしない場合は、この投稿の残りをスキップしてください。コメントと回答の個人は、私がすべきでないことを求めていると信じているようです。そのため、ゲームがどのように機能するかについてさらに説明します。 プレーヤーには、障害物と目標が含まれるパズルまたはレベルが与えられます。最初は、シミュレーションは実行されていません。その後、提供されたピースまたはツールを使用してマシンを構築できます。スタートを押すと、シミュレーションが開始され、マシンを編集できなくなります。マシンがマップを解決した場合、プレイヤーはレベルをクリアしています。それ以外の場合は、停止ボタンを押してマシンを変更し、再試行する必要があります。 すべてを決定論的にする必要がある理由は、各ピースの位置、サイズ、回転を記録することにより、すべてのマシン(レベルを解決しようとするピースとツールのセット)をxmlファイルまたはjsonファイルにマッピングするコードを作成するためです。その後、プレイヤーはソルブ(これらのファイルで表されます)を共有して、ソルブの検証、相互の学習、競技会の開催、コラボレーションなどを行えるようになります。もちろん、ほとんどのソルブ、特にシンプルまたはクイック決定論の欠如の影響を受けません。しかし、本当に難しいレベルを解決する低速または複雑な設計は、おそらく最も興味深いものであり、共有する価値があると思われる設計です。

3
非整数の速度値-これを行うよりクリーンな方法はありますか?
多くの場合、ピクセルベースのゲームでキャラクターを動かすために、2.5などの速度値を使用します。ただし、衝突検出は一般的に私が行うとより困難になります。だから私はこのようなことをすることになります: moveX(2); if (ticks % 2 == 0) { // or if (moveTime % 2 == 0) moveX(1); } 私はそれを書く必要があるたびに内側にうんざりしますが、非整数の速度値でキャラクターを移動するよりクリーンな方法はありますか、これを永遠にやり続けるのですか?

1
Unrealでは、C ++のfloatとFFloat32の違いは何ですか?
私はUE4のより深い側面を学ぼうとしていますが、多くのサンプルコードとエンジンのソースベースを読んでいると、人々(およびソースコード)が標準のC ++ floatプリミティブを使用するが、UE4のカスタム実装を使用することがあることに気付きましたFFloat32。 その後、私は好奇心が強くなりました:Unrealでゲームをプログラミングするとき、これら2つのオプションを使用することの違いは何ですか?また、エンジンの実装を支持して標準C ++プリミティブをドロップすべき主なケースは何ですか?

3
「世界からの脱落」を引き起こした原因とそれを修正した理由
初期の3Dゲームの多くは、あなたが楽しそうに歩き回り、突然すべてが黒くなるという問題を抱えていました。そして、あなたが歩いていたシーンの中空のファサードのシェルのように見える島が上の距離まで上昇しました。あなたが世界から落ちたからです。これはBethesda Softworksにとって長年にわたる特定の問題であったことを覚えていますが、彼らだけではありませんでした。野生で見たのは久しぶりなので、私たちはそれを過ぎてしまったようです。私の質問は2つの部分です。 1)この原因は何ですか?(私の推測では、ポイントモデリングされたキャラクターの位置と相互作用する、ポリゴン間の浮動小数点精度に関連するシーム、つまり、フロアチャンクAが位置1.0で終了し、フロアチャンクBが位置0.9998で開始し、マイクロ秒の位置が0.99992、そしてブーム、あなたは世界を転落します。しかし、それは単なる推測です。) 2)どのように修正されましたか?

3
floatを使用して作成できる最大の「相対」レベルは何ですか?
ダンジョンシージやKSPのようなゲームでデモンストレーションされたように、浮動小数点がどのように機能するかによって、十分に大きなレベルで不具合が発生し始めます。精度を落とさずに1e-20を1e20に追加することはできません。 レベルのサイズを制限することを選択した場合、オブジェクトが途切れるまで移動できる最小速度を計算するにはどうすればよいですか?

5
Bresenhamのラインアルゴリズムを浮動小数点エンドポイントに一般化するにはどうすればよいですか?
私は2つのことを組み合わせようとしています。私はゲームを書いていますが、浮動小数点の端点を持つ線上にあるグリッドの正方形を決定する必要があります。 さらに、接触するすべてのグリッド正方形(つまり、ブレゼンハムの線だけでなく、青の線)を含める必要があります。 誰かが私にそれを行う方法に関する洞察を提供できますか?明白な解決策は、単純なラインアルゴリズムを使用することですが、より最適化された(高速な)ものはありますか?

1
浮動小数点精度(fp:preciseとfp:fast)
CまたはC ++では、浮動小数点精度のコンパイラオプションは、実際の(スモール/インディーズ)ゲームに本当に違いをもたらしますか? 私の観察によると、fp:fastの設定はfp:preciseよりも何倍も速く、私がここで理解していることから(/programming/6889522/fpfast-vs-fpprecise-what-kind-of-errors-can -i-encounter)2つのコンパイラオプション間の精度の違いは、浮動小数点数の16桁目からのみ変更されます。 fp:fastを使用しているときに2Dまたは3Dゲームでひどく間違った例を見つけた人はいますか? 編集:明確にするために、私は浮動小数点値自体の精度については質問していません(つまり、浮動小数点と倍精度と10進数)。コンパイラオプションに関連する精度についてのみ。
10 c++  c  floating-point 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.