問題タブ [expression-evaluation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
6 に答える
7281 参照

java - なぜ「a^=b^=a^=b;」なのか 「a^=b; b^=a; a^=b;」とは違う?

XORを使用して、3番目の変数を使用せずにJavaで2つの整数を交換するコードをいくつか試しました。

私が試した2つのスワップ機能は次のとおりです。

このコードによって生成された出力は次のとおりです。

私は知りたいのですが、なぜこの声明があるのですか:

これとは違う?

0 投票する
1 に答える
216 参照

java - 新しいプログラミング言語の抽象構文木を評価する方法

「新しい」言語用のコンパイラを設計したい。新しい言語は独自の構文を持ち、有効な C コードを出力する。つまり、疑似コードから AC コードを生成する。抽象構文ツリー。たとえば、if 構造のツリーを取得しました。これを元の C コードにマップするにはどうすればよいですか? 順序通りのトラバーサルなどを実行できますか?

Aho Ullman の本を読んだことがあります。インタープリターの実行とコンパイルの違いは何ですか? 訪問者パターンを適用できますか?

0 投票する
1 に答える
196 参照

math - 変数の対数が与えられた場合の式の対数の評価

式の値をプログラムで決定する必要があります。

次の値のみを使用します。

lx ily iのそれぞれの逆対数を計算することはおそらく非現実的であり、望ましくありません ...

この評価を単純な合計に分解できる方法はありますか?

編集

単純な合計で計算を行う C 関数をどこかで見ました。

値のペアごとに戻り値が追加され、これが正しい答えを与えているようです。しかし、私はそれがどのように、そしてなぜ機能しているのか理解できません!

0 投票する
1 に答える
1368 参照

java - Java strictfp 修飾子は最新の CPU に影響を与えますか?

strictfpJLSによると、メソッド(およびクラス)の修飾子の意味を知っています:

JLS 8.4.3.5、strictfp メソッド:

strictfp 修飾子の効果は、メソッド本体内のすべての float または double 式を明示的に FP-strict にすることです (§15.4)。

JLS 15.4 FP 厳密な式:

FP 厳密式内では、すべての中間値は float 値セットまたは double 値セットの要素でなければなりません。これは、すべての FP 厳密式の結果が、single および double 形式を使用して表現されたオペランドに対する IEEE 754 演算によって予測されたものでなければならないことを意味します。 .

FP 厳密ではない式内では、実装が中間結果を表すために拡張指数範囲を使用するための余裕が認められます。大まかに言えば、実際の効果は、float 値セットまたは double 値セットを排他的に使用するとオーバーフローまたはアンダーフローが発生する可能性がある状況で、計算が「正しい答え」を生成する可能性があることです。

strictfpメソッド内の式とそうでない式の間の実際の違いを取得する方法を考え出そうとしていstrictfpます。Intel Core i3 CPU と Intel Core i7 CPU を搭載した 2 台のラップトップでこれを試しました。そして、私は違いを得ることができません。

多くの投稿は、 を使用しないネイティブ浮動strictfp小数点数が 80 ビット浮動小数点数を使用している可能性があり、可能な限り最小の Java double (ゼロに最も近い) よりも下、または可能な限り最大の 64 ビット Java double よりも上に余分な表現可能な数値があることを示唆しています。

以下のコードをstrictfp修飾子の有無にかかわらず試してみましたが、まったく同じ結果が得られました。

実際には、コードがアセンブリにコンパイルされた場合にのみ違いが現れると想定しているため、-XcompJVM 引数を使用して実行しています。しかし違いはありません。

HotSpot によって生成されたアセンブリ コードを取得する方法を説明する別の投稿を見つけました ( OpenJDK ドキュメント)。でコードを実行していますjava -Xcomp -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly。修飾子を含む最初の式 ( v * 1.0000001 / 1.0000001) と、strictfp修飾子を含まない同じ式は、次のようにコンパイルされます。

そのコードには、私が予想していたように、各ステップの結果を 64 ビットに切り捨てるものは何もありません。、および ドキュメントを調べると、これらの (SSE) 命令は、予想した 80 ビット値ではなく、64 ビット浮動小数点値で動作することがすべて言及されています。したがって、これらの命令が動作する double 値セットがすでに IEEE 754 値セットであることは論理的に思われるため、それがある場合とない場合に違いはありません。movsdmulsddivsdstrictfp

私の質問は次のとおりです。

  1. この分析は正しいですか?私は Intel アセンブリをあまり使用しないので、結論に自信がありません。
  2. strictfp修飾子を使用する操作と使用しない操作に違いがある (他の) 最新の CPU アーキテクチャ (JVM を含む) はありますか?
0 投票する
1 に答える
60 参照

bash - 式を評価し、結果を Windows Batch の別のプログラムに送信する

短い文でこれを明確にする方法がわからないので、この例を挙げます

バッシュ:

まず、「ls -a」が評価され、その出力に変換されます。だから私たちはこの行を持っています

そしてそれが実行されます。

Windowsコマンドラインを使用して同じことを達成するにはどうすればよいですか?

PS : IDE がビルドを作成するときに使用する必要があるため、PowerShell または CygWin を使用するオプションはありません

0 投票する
2 に答える
494 参照

java - ネストされた割り当てを使用して式の参照を更新する

この質問に似たこのサンプルコードを見る:

これはfalseを出力します。NullPointerException で失敗しないのはなぜですか? equals メソッドを実行する前に代入を処理する必要がありますが、行全体が評価されるまで equals が呼び出される参照には影響しませんか?

Java 言語仕様のどこにこれが記述されているかわかりませんでした。

0 投票する
1 に答える
146 参照

c# - 論理評価者

ファイルを上書きする方法を決定するために「ユーザーオプション」をサポートする必要があるプログラムがあります。ユーザーは「オプション」から選択できます。これにより、いくつかの組み合わせが可能になり、可能なすべての「IF ... ELSEステートメント」をコーディングするのが難しくなります。 、この複雑な結果評価はコーディングするのが難しく、長くなりすぎて気が狂いそうになります!

私はこれをある種の「解析」で解決して、可能なすべての結果をより速く、より有機的な方法で評価し、IF ... ELSE ブロックの長いチェーンを使用しないようにしています。

これが私のプログラムオプションにあるものです:

http://i.stack.imgur.com/Ggpbl.png

例: ユーザーがファイルの上書きを選択し、オプション「ファイル サイズ」を選択し、このオプションの基準として ">=" を選択し、さらに「ファイル日付」と「<=」を選択し、「OR」を選択したとします。すべてのオプションを選択すると、「FILE >= x」または「FILE DATE <= x」のような結果になります。

上記のスクリーン ショットのオプションを使用すると、ユーザーはあらゆる種類の可能な論理オプションを作成し、"OR" と "AND" を使用してそれらを組み合わせることができます。また、">、<、>=、<=、=、<> を選択することもできます。 "。

この小さな画面の背後にある複雑さは非常に大きく、私はこれに取り組む方法を研究してきました.ラムダ式とバイナリツリーと呼ばれるものについて聞いたことがありますが、それが私の問題に当てはまるかどうかはわかりません.少なくとも誰かが私を正しい方向に向けてくれます。答えを探し回るときに「問題」を正しく分類する方法さえわかりません:)

よろしくお願いします!