問題タブ [pow]
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.
android - glslでの未定義のNaNまたはInf値の処理。matherrorsを考える
glslシェーダー(GL 2.0)の厄介なバグをまだ取り除くことができませんでした...この問題の解決策を3週間以上探しましたが、何も見つかりませんでした。グーグルには多くの例と説明がありますが、どれも実際には機能しません。
まず、これが私のfragmentshaderコードです。その後、問題が正確に何であるかを説明します。
次の変数値があります。ここで、
- pl_はpointlightvaluesであり、
- dl_は方向性のある光の値であり、
- mat_diffは、マテリアルの拡散値です。
- また、mat_spec、mat_elum、mat_shineは、マテリアルスペキュラー、エリミネーション、シャイニーネス用です。
- N =通常、
- V =ビュー-ベクトルから頂点、
- L =光-ベクトルから頂点、
- R =反射ベクトル、
- D =光距離、
- DF =光をブレンドするための距離係数、
- S =計算された鏡面反射率、
- F = L、Nからの内積
- およびdiff、計算されたdiffuse/spec-vectorsのspecvectorsum。
ここで、次の問題が発生します。ポイントライト自体が完全に実行されます。ディレクショナルライト自体も完璧に動作します。しかし、一緒にそれらはあまりうまく機能しません。問題を正確に説明します。最大で4つのポイントライトと4つのディレクショナルライトがあります。テストには、4つのポイントライトと1つのディレクショナルライトを使用しました。
- forループの計算で指向性ライトをコメントアウトすると、次の結果が得られます。
- ポイントライトのforループをコメントアウトすると、次の結果が得られます。
- 両方のforループを有効にした場合、次のようになります。
指向性ライトは完全に無視されているようです。代わりに、車はポイントライトだけで照らされます。
だから、私が見つけたもの:forループ、ポイントライト->指向性ライトの順序を、dirlights->ポイントライトの代わりに変更すると、効果が入れ替わります:ポイントライトは無視され、指向性ライトが計算されます。
私もわかったことですが、この問題は次の問題である必要があります:pow()関数またはゼロ除算ですが、次のコード行をコメントアウトすると、次のようになります。
私は次の結果を得ることができます:
->拡散色は、ポイントライトと指向性ライトに対して通常どおり計算されます。
そこで、この問題を解決する方法を考えました。なぜなら、0を0で表すと、数学エラーが発生するからです。ゼロ除算も....未定義の値を回避するにはどうすればよいですか?
isnan()またはisinf()関数はandroid-glslに存在しないようです。
アンディの解決策または私がもっとうまくできることを教えてください、これはうまくいくでしょうか?少しでもお役に立てれば幸いです。これは私を3週間から怒らせます。ヘルパーに感謝します!:)
コードの詳細: https ://github.com/Chrise55/Llama3D
クリス
c++ - この関数が値2^31を超えないのはなぜですか?
べき関数(C ++で記述)...
今、私はいくつかの出力テストを行います...
出力:
(64ビットのままではなく)32ビットサイズへの長いフォールバックには問題があるようです。なぜこれが機能しないのか疑問に思いますが、このlong long
タイプを使用すると、すべてが正常に機能します。
いくつかの追加情報:
私はC++とコンパイラMinGW
を使用しています64ビットOSを実行しています(Windows 7)
アップデート:
あなたたちは素晴らしいです!この種のことが起こっているとは思わなかった。
を使用して任意のPDTをチェックしsizeof
たところ、これが見つかりました...
出力:
だから、それは私のように見え、long
両方int
とも32ビットのサイズです。もう少し遊んでみると、intmax_tタイプも64ビットであることがわかります。事実上、すべてのPDTは64ビットに制限されているので、128ビット整数を表す必要がある場合、c ++にはそのための組み込みクラス(BigInteger
Javaと同様のもの)がありますか?
c - powl() が存在する場合、sscanf() によりリンクが失敗する
以下の簡素化されたプログラムをコンパイルすると、リンカから次のエラーが表示されます。
で行をコメントアウトするとsscanf()
、コンパイルは成功し、機能が低下してもプログラムは正しく実行されます。代わりに次を含む行をコメントアウトしても機能しますpowl()
バージョンは次のとおりです。
同じ結果:
ラン:
私は何を間違っていますか?
c# - Math.Pow()は.NET Frameworkでどのように実装されていますか?
私はb(say a = 2
and )を計算するための効率的なアプローチを探していましたb = 50
。Math.Pow()
まず、関数の実装を見てみることにしました。しかし、.NET Reflectorでは、私が見つけたのはこれだけでした。
Math.Pow()
関数を呼び出すと、内部で何が起こっているかを確認できるリソースにはどのようなものがありますか?
c - gccとmath.hの奇妙な振る舞い?
私は数学関数を使用するコードを作成しようとしています(例pow
)。
math.h
が含まれ、フラグ-lm
はビルド中に使用されます。
このようにコンパイルが呼び出されると(-lm
コマンドの先頭にあるフラグ)、:への未定義の参照があると言って失敗しましたpow
。
そして、-lm
旗がコマンドの終わりに置かれるとき、それは働きます!
これは正常ですか?
c - C の累乗関数の未定義参照エラー
gcc 4.6.1 を使用しています。
コードスニペット:
ターミナル:
x を 2 に置き換えると、期待どおりに実行されます。pow 関数は変数をパラメーターとして受け入れませんか?
注: ソース ファイルに stdio.h と math.h を含めました。
c++ - C++: 2 つの定数を使用した pow() の最適化
簡単な質問: コンパイラーが2 つの定数(つまり、マクロからの値) を持つ pow() の呼び出しに直面した場合、コンパイル時に評価することによって最適化されますか、それとも実行時に計算されますか?
例:
ありがとう!
EDITそうでない場合、コンパイル時にマクロの正方形/立方体を別のマクロとして計算する方法はありますか(上記で試みているように)?
c - 非常に遅いpow()関数の置き換え
CFDソルバーがあり、シミュレーションの実行中に、一部のマシンでは非常に低速で実行されることがわかりましたが、他のマシンでは実行されませんでした。Intel VTuneを使用すると、次の行が問題であることがわかりました(Fortranの場合)。
VTuneでドリルインすると、問題はcall pow
組立ラインにトレースされ、スタックをトレースすると、を使用していることがわかりました__slowpow()
。いくつか検索した後、このページは同じことについて不平を言っているように見えました。
libcバージョン2.12のマシンでは、シミュレーションに18秒かかりました。libcバージョン2.14のマシンでは、シミュレーションに0秒かかりました。
上記のページの情報に基づくと、ベースがpow()
1.0に近い場合に問題が発生します。そこで、別の簡単なテストを実行しました。このテストでは、ベースの前に任意の数値をスケーリングし、呼び出しpow()
後に指数に累乗した数値で除算しました。pow()
これにより、libc2.12でもランタイムが18秒から0秒に短縮されました。
ただし、これをコード全体に配置することは実用的ではありませんa**b
。pow()
libcの関数をどのように置き換えますか?たとえばcall pow
、Fortranコンパイラーによって生成された組立ラインpow()
で、スケーリングを実行し、libcpow()
を呼び出してから、スケーリングで除算するカスタム関数を呼び出すようにします。コンパイラに対して透過的な中間層をどのように作成しますか?
編集
明確にするために、(擬似コード)のようなものを探しています:
pow
名前の競合を回避するために、from libcをロードし、カスタム関数で名前を変更することは可能ですか?customPow.o
ファイルの名前をlibcから変更できる場合、pow
他の目的でlibcがまだ必要な場合はどうなりますか?pow
それはincustomPow.o
とinlibcの間で名前の競合を引き起こしpow
ますか?
c++ - math.h ライブラリの pow() - 関数を使用して適用する方法
そのため、関数の戻り値を特定の累乗にする必要があるコードを少し書いています。私は最近、べき乗に '^' 演算子を使用しても役に立たないことを発見しました。これは、C++ では実際には XOR 演算子またはそのようなものであるためです。今ここに私が書きたいコードがあります:
これが正しいかどうか、誰か教えてもらえますか?コードを説明します。皆さんが知っているように、私は int 変数 answer を宣言し、それを「base」と呼ばれる変数の値に初期化し、「power」と呼ばれる他の変数に作用する raiseTo() 関数の戻り値に上げました。これを行うと (そして Visual C++ 2010 Express Edition でコードを編集してコンパイルすると)、「pow」という単語の下に赤いダッシュが表示され、次のエラーが表示されます。 list"
誰かこの問題を解決してくれませんか? また、この pow() 関数全体が実際にどのように機能するかについても説明していただけますか?率直に言って、私はまだ初心者なので、www.cplusplus.com の参照は少しわかりにくいです!
c++ - 再帰を使用して基数をその指数まで上げる - C++
関数の再帰を利用してベースをそのパワーまで引き上げるコードを書きたいだけです。再帰が C++ での処理に最適な方法ではないことはわかっていますが、その概念について少し調べてみたいと思います。プログラムはユーザーに基数と指数を尋ね、コンソールが答えを出します。これが私が書いたプログラムです:
面白いことに、このプログラムを実行すると、答えが常に '1' として返されます。誰かがこれについて私を助けてくれますか?