問題タブ [strictfp]
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.
java - javaで「strictfp」キーワードを使用する必要があるのはいつですか?
私はこれが何をするのか調べましたがstrictfp
、Javaでキーワードをいつ使用するかの例を実際に持っている人はいますか? 誰かが実際にこれの用途を見つけましたか?
すべての浮動小数点演算にそれを置くだけで副作用はありますか?
java - strictfp 非アクセス修飾子の使用は何ですか?
これは重複した質問であることを知っています。しかし、私は例でそれを知りたいです。誰でも例を挙げて説明できますか?
重複投稿へのリンク: Java で「strictfp」キーワードを使用する必要があるのはいつですか?
scala - Scalaにstrictfpはありません-回避策はありますか?
Scalaで強制する方法をウェブで検索しましたsrictfp
が、そのヒントは見つかりませんでした。不満を言う人もいますが、本当の解決策は見つかりません。ほぼ2年前のバグトラッカーエントリがあります。回避策を探している途中で、それに対するエレガントな修正はないようです。
私の現在の考えは、生成されたバイトコードに適切なメソッドフラグACC_STRICT
を自分で設定することですが、それを行うための最善の解決策が何であるかわかりません。Scalaコンパイラプラグインが頭に浮かぶか、16進エディタでフラグをハッキングするだけです。たぶん誰かが同じ課題に直面し、彼または彼女の解決策を教えてくれますか?
java - Javaのstrictfp
私はJavaでいくつかのニューラルネットワークライブラリを実装していますが、集中的なdouble
(ではないDouble
)行列演算があり、行列は大きく、もちろんパフォーマンスが必要です。
それで、strictfp
キーワードについて読むようになりました。正直なところ、それが何をするのか正確には理解できませんでした。それを使用すべきかどうか、そしてその理由についての簡単な説明を探していました。
java - strictfp と StrictMath に関する疑問
少し技術的な質問があります。電話するのと同じですか:
また:
それとも、キーワードはメソッド内で使用されるstrictfp
基本的な算術演算に適用されるだけですか?+ - * /
java - (静的) 初期化子ブロックを strictfp にする方法は?
いくつかのコードをリファクタリングしているときに、この奇妙な点に遭遇しました。クラス全体に影響を与えずに初期化子の strictfp プロパティを制御することは不可能のようです。例:
JLS のセクション 8.1.1.3から、クラスが strictfp 修飾子を使用して宣言される場合、初期化子は strictfp になることがわかります。しかし、それはまた、すべてのメソッドを暗黙的にstrictfp にするとも言っています:
strictfp 修飾子の効果は、クラス宣言内 (変数初期化子、インスタンス初期化子、静的初期化子、およびコンストラクター内を含む) 内のすべての float または double 式を明示的に FP 厳密にすることです (§15.4)。
これは、クラスで宣言されたすべてのメソッド、およびクラスで宣言されたすべてのネストされた型が暗黙的に strictfp であることを意味します。
ということで、静的イニシャライザにモディファイヤを受け付けず、クラス全体に適用すると全てがstrictfpになる?strictfp キーワードの反対がないので、これは実現不可能ですか?
それで、静的メソッドを使用してイニシャライザ ブロックの本体を保持し、strictfp'dness を正確に制御することに夢中になっていますか?
java - メソッド宣言でabstractキーワードとstrictfpキーワードを一緒に使用できない理由は?
キャサリン・シエラのSCJPを読んでいます。
本で説明されているように、抽象キーワードと最終キーワードは互いに矛盾するため、一緒に使用できないことを理解しています。
しかし、strictfp キーワードと abstract キーワードを一緒に使用できない理由がわかりません。
strictfp キーワードが Java で正確にどのように機能するかはまだわかりません。
私の考えでは、抽象的なstrictfpメソッドを宣言し、サブクラスを持ち、そのメソッドを「strictfpの方法」で実装できます。
これらのキーワードがうまく調和しない理由は何ですか?
編集
本を再確認しましたが、確かに
インターフェイス メソッドは抽象的であるため、 final 、 strictfp 、または native とマークすることはできません。
キャサリン・シエラによるSCJPから。21ページ。
また、私の IDE (Eclipse Juno) は、abstract キーワードと strictfp キーワードを一緒に使用できないと言っています。
うーん、なぜですか?
java - Java クラスを strictfp と宣言すると、それが他のクラスで呼び出すメソッドも strictfp になりますか?
タイトルのように... クラス X が strictfp と宣言され、クラス Y のメソッドを呼び出す場合、厳密性が強制されますか、それとも X 自身のコードにのみ適用されますか?
さらに、strictfp クラス メソッドで値を計算し、それを非 strictfp メソッドに渡す場合、それ以上の計算が行われなければ、その値はまだ「安全」ですか?
java - javassistを使用して、すべてのJava算術を実行時にstrictfpに強制しますか?
パフォーマンスを念頭に置いて作成された Java アプリケーション (つまり、ソース コードでメソッドが意図的に「strictfp」と宣言されていない) の場合、ユーザーがアプリケーション全体を strictfp モードで実行できるようにすることは可能ですか?
javassist を使用して記述されたカスタム クラス ローダーを使用して、すべてのクラスのすべてのメソッドに「strictfp」属性を単純に追加するのが、大まかなアプローチのようです。これは次のようになります。
http://www.verious.com/qa/no-strictfp-in-scala-workarounds/
ただし、クラス ローダーは、アプリケーション内のすべてのクラス メソッド (プライベート メソッドを含む) にstrictpf 属性を追加する必要があります。(アプリケーションは、strictfp 属性を必要とする可能性のあるすべてのメソッドを明示的にリストするには、大きすぎて複雑すぎます。)
javassist のリフレクション API は、プライベート メソッドのリストをサポートしていないようです。
http://www.csg.ci.iu-tokyo.ac.jp/~chiba/javassist/html/javassist/CtClass.html#getMethods()
私がやりたいことはjavassistで可能ですか(またはカスタムクラスローダーのアプローチを介して)?
java - Scala strictfp アノテーションが ClassFormatError を引き起こす
私は Scala でマルチプレイヤー ゲームを作成しています。このゲームでは、すべてのコンピューターで浮動小数点計算がまったく同じ方法で行われる必要があるため、@strictfp
すべてのクラス、オブジェクト、およびトレイトに注釈を追加してみました。ただし、コードを実行しようとすると、次のようなエラーが発生しますjava.lang.ClassFormatError: Method handleKeyPress in class com/nathanstoddard/common/renderer2d/InputHandler has illegal modifiers: 0xC01
。そのクラスから注釈を削除する@strictfp
と、別のクラスの別のメソッドに対して同様のエラー メッセージが表示されます。
このエラー メッセージの意味と修正方法を教えてください。私のコードまたは Scala コンパイラーのバグですか?
小規模なアプリケーションでタグを使用してみましたが@strictfp
、これまでのところ、大規模なプロジェクト以外ではこのクラッシュを再現できませんでした。
また、strictfp をグローバルに有効にする方法があるので、すべてのクラスに追加する必要はありませんか?
私は Windows 7 で Scala 2.10.3 と Java 1.7.0_10 (64 ビット) を使用しており、sbt 0.12.2 でプログラムを実行しています。