タグ付けされた質問 「math」

問題の根底にある数学によって大きく影響を受ける、または最もよく定義されるプログラミングの質問。

2
`Vector <float> .Equals`は再帰的である必要がありますか、それともIEEE 754セマンティクスに従う必要がありますか?
浮動小数点値が等しいかどうかを比較する場合、2つの異なる方法があります。 NaN一致する、それ自体に等しくないIEEE 754仕様。 NaN等価関係の定義に不可欠な反射性の数学的特性を提供する、それ自体に等しい C#(にIEEE浮動小数点型に内蔵floatし、doubleIEEEのためのセマンティクス従う)==及び!=(等リレーショナル演算子&lt;)が、ための反射性を確保しobject.Equals、IEquatable&lt;T&gt;.Equals(およびCompareTo)。 ここで、float/の上にベクター構造体を提供するライブラリについて考えますdouble。このようなベクトル型は過負荷になり==/ !=およびオーバーライドobject.Equals/ IEquatable&lt;T&gt;.Equals。 何皆に同意すると、そのある==/ !=IEEEセマンティクスに従ってください。問題は、そのようなライブラリーがEquals再帰的な方法で、またはIEEEセマンティクスに一致する方法で(等価演算子とは別の)メソッドを実装するかどうかです。 のIEEEセマンティクスを使用するための引数Equals: IEEE 754に準拠 SIMD命令を利用できるため、(おそらくはるかに)高速です。 私は、スタックオーバーフローについて、SIMD命令を使用して再帰的等式をどのように表現するか、およびそれらのパフォーマンスへの影響について、別の質問をしました。浮動小数点の等値比較のためのSIMD命令 更新: 3つのSIMD命令を使用して効率的に再帰的等式を実装できるようです。 のドキュメントでEqualsは、浮動小数点を使用する場合に再帰性は必要ありません。 次のステートメントは、Equals(Object)メソッドのすべての実装に当てはまる必要があります。リストには、x、y、およびznullではないオブジェクト参照を表します。 x.Equals(x)true浮動小数点型を含む場合を除いて、を返します。ISO / IEC / IEEE 60559:2011、情報技術-マイクロプロセッサシステム-浮動小数点演算を参照してください。 floatを辞書のキーとして使用している場合は、罪の状態にあり、正常な動作を期待するべきではありません。 再帰的であるという主張: それはを含む既存のタイプと一致だSingle、Double、TupleとSystem.Numerics.Complex。 Equals再帰的ではなく、IEEEに従うBCLの前例は知りません。カウンターの例としてはSingle、Double、TupleとSystem.Numerics.Complex。 Equals主に、反射性に依存するコンテナと検索アルゴリズムで使用されます。これらのアルゴリズムでは、動作を妨げる場合、パフォーマンスの向上は重要ではありません。パフォーマンスの正確さを犠牲にしないでください。 これは、すべてのハッシュベースのセットや辞書、壊れるContains、Find、IndexOfさまざまなコレクション/ LINQ、セットベースのLINQの操作(上Union、Exceptデータが含まれている場合など)NaNの値を。 IEEEセマンティックが受け入れられる実際の計算を行うコードは、通常、具象型で機能し、==/ !=(またはより可能性の高いイプシロン比較)を使用します。 ジェネリック演算が必要なため、現在ジェネリックを使用して高性能計算を作成することはできませんが、これらはインターフェース/仮想メソッドを介して利用できません。 したがって、遅いEqualsメソッドはほとんどの高性能コードに影響を与えません。 IEEEセマンティクスが必要な場合、またはパフォーマンス上の利点が必要な場合に、IeeeEqualsメソッドまたはを提供するIeeeEqualityComparer&lt;T&gt;ことができます。 私の意見では、これらの議論は再帰的な実装を強く支持しています。 MicrosoftのCoreFXチームは、そのようなベクトル型を.NETに導入することを計画しています。私とは異なり、彼らは主にパフォーマンス上の利点のために、IEEEソリューションを好みます。このような決定は最終リリース後も変わらないので、大きな間違いだと私が信じていることについてコミュニティからフィードバックを得たいと思います。

1
unumはどのようにしてIEEEの負のゼロをエミュレートできますか?
私は現在、John Gustafson(Youtube)による「The End of Error-Unum Computing」を読んでいます。私がまだ確信がないのは、負の符号の付いたゼロによってIEEEで処理されたケースがunumでどのように処理されるかです。 したがって、最初に、unumは特定の正確な値(浮動小数点と同様)を表すことを許可し、さらに正確な値(正確な-∞と∞を含む)の間にある開いた間隔を表すことを許可します。したがって、完全な実数線は、正確な値と開いた間隔を交互に繰り返すことによって表されます。 -∞、(-∞、-maxreal)、-maxreal、... -smallsubnormal、(-smallsubnormal、0)、 0、 (0、smallsubnormal)、smallsubnormal、... maxreal、(maxreal、∞)、∞ このように、(IEEEの伝統では)アンダーフローやオーバーフローなどの例外的な値は、ほんの一部のオープンインターバルです。言い換えれば、これらの以前は特別な条件だったものが、今では通常のケースに変わります。 IEEEの-∞は、{-∞}と(-∞、-maxreal)の和集合に対応します。 そして、符号付きゼロは、間隔(-smallsubnormal、0)と(0、smallsubnormal)になる可能性があります。 ただし、1 /(-smallsubnormal、0)は(-∞、-maxreal)になり、-∞だけではなくなりました。一方、1/0は∞です。 これについて私がまだ躊躇しているのは、IEEE -0と+0で比較すると等しいことです。しかし、それらはunumにはありません。マッピングは100%ではないようです。だから、違いが現れるかもしれないコーナーケースがあるかどうか(そしてそれらのケースが本当に関連しているかどうか)? (私は、なぜ負のゼロが重要なのかを知っていますか?、 負の浮動小数点値の使用)

3
プログラミング言語の設計者がモジュロ演算の結果の符号を決定するときに使用される理論的根拠は何ですか?
通って行く剰余演算(の違いを探索しながら、私が入った大通りremとmod)私が出くわしました: 数学では、剰余演算の結果はユークリッド除算の残りの部分です。ただし、他の規則も可能です。コンピュータと計算機には、数値を保存および表現するさまざまな方法があります。したがって、それらのモジュロ演算の定義は、プログラミング言語や基盤となるハードウェアに依存します。 質問: 通って行くユークリッド除算私は、この操作のremainnderは常に正(または0)であることがわかりました。基盤となるコンピューターハードウェアの制限によって、プログラミング言語の設計者は数学とは異なるものになりますか? すべてのプログラミング言語には、モジュロ演算の結果に応じて符号が付けられる、定義済みまたは未定義のルールがあります。これらのルールを作成する際に採用される根拠は何ですか?基盤となるハードウェアが問題である場合、プログラミング言語とは関係なく、それに応じてルールを変更しないでください。

1
リレーショナル代数/計算の証明を使用してSQLをテスト/検証できますか?
SQLステートメント、関数、およびストアドプロシージャの正当性をテスト/検証するために、証明の形式でリレーショナル代数および/またはリレーショナル計算を使用することは可能ですか、それとも可能ですか? 少なくともそれは可能であるように思えますが、証拠とコードの間の1:1マッピングを不正確にする欠落している詳細があるかどうかはわかりません。 このような方法を試した人はいますか?うまくいきましたか?どのような体験をしましたか?

1
数学はHaskellの型システムの背後にある理論を理解する必要がありますか?
最近、私はハスケルに深く興味を持っています。 新しい概念(forallキーワードやSTモナドなど)とHaskellの型システム全般を学習しようとしている間、私は絶えずカテゴリー理論とラムダ計算の概念に出くわしました。だから、私は思う: Haskellの型システムを十分に理解するには、数学の他のどの分野が重要ですか? これらの数学の厳密な研究を見逃して、代わりに特定の関連する概念に焦点を当てることはできますか?(例えば、ラムダ計算における数量詞。)もしそうなら、どの概念が不可欠ですか? タイプとプログラミング言語をすぐに取り上げたいと思っていますが、適切と思われる代替の参考資料を提案してください。

1
外れ値を減らすためにゲーム数が少ないときにELOアルゴリズムを変更する方法
私はここで見つけることができる標準のELO実装を開発しましたが、私が遭遇している問題は、私のプレイヤーが「シーズン」で10〜40ゲームしか持てないことです。私の最初のシーズンは既に完了しているので(ゲームのOWNレーティングシステムを開始したばかりです)、ELOレーティングのランクは、または少なくともそれに非常に近いはずです。私の問題は、その基本アルゴリズムを実装した後、かなり離れたいくつかの外れ値があることです。 私は10〜40ゲームしかないので、この状況を改善するために最初に考えたのは、このプロセスの周りにループを実装し、1つのサイクルから最終結果のELOレーティングを取得し、それを次のサイクルの開始点として使用することでした(各個人について)プレーヤー)。次に、前のサイクルから現在のサイクルまでのELO定格の平均または最大偏差がX以下になるまで、これらのサイクルを繰り返します。これは、いくつかの大きな外れ値を解決するのに役立ちました。まだ気に入らない小さな外れ値がまだいくつかあります... 例として、私は7つのディビジョンを持っています。ディビジョン1の場合、ELOに基づいて#1にランク付けされる男は5位にランクされ、ディビジョン2の場合、1位にランクされる男は3位になります。これらの種類の外れ値を除いて、各部門のトップ10程度は実際にはかなり近いです。 アルゴリズムを変更するにはどうすればよいですか?または外れ値を試し、減らすためにどのようなアプローチを取ることができますか? サイドノート#1。ディビジョン1の場合、#1であるはずの男が最終的に#5になりますが、実際には、他のレーティングシステムによってシーズン全体で#1にランクされています。その計算方法がわからないだけです(計算されない可能性があり、それに基づいている可能性があります。xプレーヤーがこれでいいので、彼は1位にランクされています)。 サイドノート#2。アルゴリズムを変更しました。私は、勝利/損失がどれほど支配的であるかによって、勝利/損失を「重み付け」したいと考えています。プレーヤーAがプレーヤーBに20対0で勝った場合、特にそれらのレーティングが非常に近い場合に、加重を大きくしますが、レーティングがさらに離れている場合(aがすでにBよりも大きい場合)、ELOの変更はそもそも彼らが最初に勝つと予想されていたからです。したがって、私がしたことは、元の式が使用するようにk係数/値400を使用する代わりに、に変更しました100 + ((score difference) * 2)。したがって、最大k係数は140になります(20-0が最大の勝利で、2を掛けて100に加算されます)。 ウェイト結果を含め、それらの外れ値の一部を修正するために、他にどのような戦略を実装できますか? 目の前にデータがない場合(すべてが家にある)、シナリオをまとめてみます... ディビジョンI #1 Elo Rating of 2250 #2 Elo Rating of 2200 #3 Elo rating of 2190 #4 Elo rating of 2175 #5 Elo rating of 2170 トーナメントで勝つために#5の男が#1を打ち負かしただけで、彼の "作品群"は#1の男よりも完全であるように見えます(別名彼は対戦し、#1の男よりも強い対戦相手を打ちました)。多分それは、「加重」kファクターがこれを捨てているためです。#5の勝ちが2〜5ポイントしかなかったためです。一方、#1勝はより高いマージン、たとえば5〜10ポイントでした。 たぶん、計算された結果を実際の結果に近づけることができるかどうかを確認するために、「重み付けされた」k係数をいじる必要があるだけかもしれません...
8 c#  math 

3
プログラムで連動するがランダムなサイズの正方形のグリッドを構築する方法
長方形の2次元レイアウト、つまりランダムなサイズの立方体で構成されるグリッドを作成したいと思います。立方体は互いにフィットし、パディングまたはマージン(間隔)が等しい必要があります。漫画本のレイアウトのようなもの、または添付された画像のようなもの。 どうすればこれを手続き的に行うことができますか? 実際には、おそらくPythonといくつかのグラフィックソフトウェアを使用して画像をレンダリングしますが、ランダム化されたグリッドを生成するために使用する必要があるアルゴリズムの種類(またはその他)がわかりません。

2
コンピュータ科学者にとって離散数学はどのくらい重要ですか?[閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 5年前休業。 ロックされています。質問はトピックから外れていますが、歴史的に重要であるため、この質問とその回答はロックされています。現在、新しい回答や相互作用を受け入れていません。 タイトルの通り、 コンピュータ科学者にとって離散数学はどのくらい重要ですか? 背景:私は、並列計算の分野で働くための優れた基盤を得るために、アルゴリズム、複雑性、計算可能性理論、プログラミング言語などの基礎に焦点を合わせて修士号を取得しています。 もう少し背景:私の大学では、修士号のコースの選択に多くの自由を与えています。正式には「ソフトウェアエンジニアリング」と呼ばれていますが、幅広い選択科目があるため、別の焦点が可能です。興味深いことに、選択科目のどれも数学の講義ではありません!学位として使えなくても、半学期を成功裏に修了する離散数学のコースを考えています。この質問で、私は努力が正当であるかどうかを調べようとしています。

3
中央値を追跡する最良の方法は何ですか?
私は質問を読み、それを解決する方法についての入力を探しています。 数値はランダムに生成され、(拡張)配列に格納されます。中央値をどのように追跡しますか? 問題を解決できる2つのデータ構造があります。1つはバランスのとれたバイナリツリーで、もう1つは2つのヒープで、要素の最大の半分と最小の半分を追跡します。これら2つのソリューションの実行時間はと同じだと思いますO(n lg n)が、自分の判断はわかりません。 中央値を追跡する最良の方法は何ですか? 私の試み: この質問では、中央値を追跡するにはヒープが最良の方法だと思います。大きなヒープと小さなヒープの2つのヒープがあり、これらは順次である必要はありません。まず、配列の要素の平均値を計算します。要素が平均値より小さい場合は、numを小さなヒープに入れます。逆に、numを大きなヒープに入れました。大きいヒープの数が小さいヒープの数と等しい場合、小さいヒープの最大のヒープと大きいヒープの最小のヒープが中央値になります。2つのヒープのサイズが異なる場合は、大きいサイズのヒープからルート要素をポップし、小さいサイズのヒープのルートにプッシュします。大きなヒープの場合、ルート要素は最小の要素であり、小さなヒープの場合、ルート要素は最大の要素です。このようにして、2つのヒープのサイズが同じであるか、デジタル差がある場合、 このソリューションの実行時間はO(m * n)であると思います。mは、アンバランスヒープを調整する時間を意味します。 これは中央値を追跡する最良の方法ですか?

1
ベイズ分類器がスパムフィルタリングに使用されるのはなぜですか?
ベイジアンスパムフィルタリングについて読んでいて、理論は理解していると思いますが、メッセージに特定の単語が含まれている場合、メッセージがスパムである可能性を計算するためにこのアプローチが必要な理由がわかりません。 ユーザーによって「スパム」または「ハム」のいずれかに分類された一連のメッセージがあり、分類したい新しいメッセージ(選択した単語を含む)を受け取った場合、確実に行う必要があるのは、数を除算することだけです。単語を含むスパムメッセージの数、単語を含むメッセージの総数...なぜすべての方程式なのか?

7
数十億の範囲の数値を因数分解するための適切なアルゴリズムは何でしょうか?
私は現在Pythonを学んでおり、私が学んでいることを適用する理由を私に与えるために、プロジェクトオイラーのいくつかの問題にひびが入っています。 私は現在、3番目の数値です。これは、その数値の最高の素因数を決定することです。 私はおそらく2つのアルゴリズムが必要であると推定しました。1つは素数性を決定するアルゴリズムで、もう1つは数の要因を見つけることです。 だから私はウィキの記事を読んでいます。使用するのに最適なアルゴリズムとは何か、それをどのように処理するかを決定すること。 しかし、ハードコアな数学ベースのプログラミングを実行してからしばらく経ち、どこかから始めるのに苦労しています。 私は、Fermatの因数分解法を使用してTrial by Divisionを含めることを検討していましたが、RSAをクラックするために複雑すぎないようにしたいのですが、問題に適した2つのアルゴリズムがあり、そこに私の質問があります。 素数性のテスト/目の前の問題に適した数の因数分解にどのアルゴリズムを使用しますか? 編集する あなたの回答と洞察をありがとうございました。彼らが最も役に立ちました。アドバイスを通じて、またはオイラーの経験を通じて、役立つものすべてに賛成しました。私が正しいとマークしたものは、正しい方向へのプッシュである出発点として適切な場所を与えてくれたので、単に最も有用でした。もう一度ありがとう=)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.