問題タブ [sqrt]

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 投票する
4 に答える
16503 参照

c - Cのint型のsqrt()

Mac OS X で C 言語でプログラミングをしています。私は math.h の sqrt を次のような関数で使用しています。

これは機能しますが、なぜですか?なぜ私は警告を受けていないのですか?sqrt のマニュアル ページでは、パラメーターとして double を取りますが、int を指定します。どのように機能しますか?

ありがとう

0 投票する
3 に答える
11670 参照

java - 精度を犠牲にして Java で高速な sqrt

[0, 2*10^12] の入力範囲の double 値の Java での高速な平方根の実装を探しています。この範囲内の任意の値の場合、精度は小数点以下 5 桁までにする必要があります。Math.sqrt()つまり、結果は小数点以下 5 桁以降のメソッドとは異なる場合があります。ただし、この方法は よりもはるかに高速である必要がありますMath.sqrt()

何か案は?ありがとう!

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

.net - OpenTK の Vector2.Length は Vector2.LengthFast の 2 倍高速です

ライブラリと、OpenTKMonoTouch および MonoDroid には、(遅いと思われる) をLengthFast使用せずにベクトルの長さの概算を計算するメソッド が含まれています。を使用します。これは、平方根の高速近似を提供する非常に興味深い方法です ( http://www.opentk.com/files/doc/_math_helper_8cs_source.htmlの 172 行目と 196 行目を参照)。Math.SqrtLengthFastMathHelper.InverseSqrtFast

100'000'000ベクトルの長さが約 1 ~ 100 の、両方の計算時間を呼び出す小さなベンチマークを作成しました。

Windows 7 / Intel i7-2600 3.40 GHz では、次のようになりました。

Length:2947 ms

LengthFast:4754 ms

MonoTouch を搭載した iPad 3 では、次の結果が得られました。

Length:51575 ms

LengthFast:41252 ms

そのためLengthFast、Intel CPU でははるかに遅く、iPad の ARM ではわずかに高速です。

これについての説明はありますか?それは、Intel CPU が「ネイティブに」(ソフトウェア近似を使用せずに) 平方根を計算できる結果ですか? LengthFast少なくとも少しは、常に高速であるべきではありませんか?

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

python - Gmpy平方精度

このコードが Python で実行される理由を知りたい

44.82186966 ではなく、結果 44 を返します。10 進数を表示するように関数を設定するにはどうすればよいですか。

前もって感謝します。

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

c++ - あいまいさの平方根

重複の可能性:
C++ コンパイラ エラー: オーバーロードされた関数のあいまいな呼び出し

pdf から C++builder XE2 と Visual Studio Express 2012 の両方にいくつかのコードをコピーしただけです。どちらのコンパイラもあいまいさに関するエラー コードを返します。まだ始めたばかりなので、どうしたらいいのかわかりません。私の教科書(pdf)は古くて時代遅れでしょうか?それは「14日間でC ++を学ぶ」と呼ばれています。とにかく、ここにコピーされたコードがあります。

私がc ++ビルダーで得たエラーコードは次のとおりです。

[BCC32 エラー] SquareRoot.cpp(19): E2015 c:\program files (x86)\embarcadero\rad studio\9.0\include\windows\crtl\math.h:266 の 'std::sqrt(float) 間のあいまいさ' and 'std::sqrt(long double) at c:\program files (x86)\embarcadero\rad studio\9.0\include\windows\crtl\math.h:302' 完全なパーサー コンテキスト SquareRoot.cpp(18):解析中: void getSqrRoot(char *,int)

余談ですが、私の PDF マニュアルの引用符は、私が入力した通常の " とは異なる文字です。これらの " もコンパイラと互換性がありません。誰かがこれに対する修正も知っているのではないでしょうか? 事前に感謝します。

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

python - Pythonでのsqrt関数の奇妙な動作

Python でカスタム コード sqrt(x, delta) を作成し、デルタ近似で特定の数値の平方根を計算しました。while ループと二分探索のようなアルゴリズムを使用します。
コード:


基本的に動作し、かなり高速ですが、無限whileループに陥る場合があります。
例:

最初は、1e20 などの制限を超える数字だと思っていましたが、その後、それらでも機能しました。また、これは 1e'odd' または 1e'even' の数字だと思っていましたが、例でわかるように、そうではありませんでした。1/1024 の代わりに別のデルタを使用して試してみましたが、同様の動作を示しました。

この動作を引き起こす舞台裏で何が起こっているのかを説明していただければ幸いです。

0 投票する
4 に答える
1496 参照

c++ - C++でasmsqrtsdを呼び出す

Visual 2012では、C++プロジェクトでsqrtsdasm関数を呼び出すにはどうすればよいですか。

グーグルで見つけられない

何かのようなもの :

編集:

32ビットモードの場合

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

fortran90 - sqrt 関数 fortran 90 エラー

sqrt を処理しようとしていますが、このプログラムをコンパイルするとセグメンテーション違反エラーが発生する理由がわかりません。sqrtが原因であることがわかりました。しかし、これらのタイプの定式化で間違いなく sqrt を使用するにはどうすればよいでしょうか?

. x_w(cont_L,0) = x2 - ((x-obstX)^2.0d0 + (y-obstY)^2.0d0) ^0.5d0 - obstR

. x_w(cont_L,1) = y2 - ((x-obstX)^2.0d0 + (y-obstY)^2.0d0) ^0.5d0 - obstR

さらに情報が必要な場合はお知らせください。

心から、

アルバート・P

PD、3 つの整数オイラー メッシュは 0 / 1 2D メッシュで、1 は壁に割り当てられ、丸い円盤で区切られます。w_b(y,x) は境界点、w(y,x) は円盤全体です。 points and x_w 障害物の離散化された正確な位置のラングランジュ ベクトルを設定したいと考えています。これは本当に理解する必要はありません。

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

math - a + b*sqrt(c) の形式の数値を、中間の整数がどんどん大きくなることなく比較するにはどうすればよいですか?

私は、円と線 ( Constructable Numbers ) を含む 2D ユークリッド幾何学の二次制約を解決し、結果をグラフィカルに表現するためのアプリケーションに取り組んでいます。このような問題を二分木で表すことに関するこの論文を見つけましたが、実装の問題に直面しています。

a + b*sqrt(c)より小さい、より大きい、等しいという標準的な関係演算の形式の数値を比較する必要があります。c私のアプリケーションのの値は、、、、、、、またはに制限さ2れています。例 (C に似た疑似コードは、"to the power of" 演算子です):356101530^

この単純な実装では、何度も乗算する必要があるため、32 ビット整数は 64 ビット整数になり、次に 128 ビットなどになります。比較。

また、フロートを使用しないことを好み、フロートとして直接計算しようとする際の丸め誤差のリスクを回避したいと考えていますsqrt(c)。このアプリケーションには正確な計算が必要であり、必ずしも無限の精度ではありませんが、丸め誤差を回避して正しい結果を保証したいと考えています。

a + b * sqrt(c)巨大な中間整数値を必要とせずに、フォームの構成可能な数値を比較するにはどうすればよいですか? aとの初期値bは 32 ビットの範囲です。

****UPDATE**** 返信ありがとうございます。連分数を追求するという提案に続いて、基本再帰式を使用して、平方根の任意の正確な近似値を生成することができました。

また、実数の近似値と固定小数点表現を整数で乗算することによる誤差の累積について説明しているこの論文も見つけました。幸いなことに、私が関心のあるすべての平方根の整数部分は最大で 6 (必要なのは 3 ビットのみ) であるため、近似のために小数部分を表すために使用できるビットがたくさんあります。32 ビット整数による乗算では、乗算後に誤差を 1 ビットに保つために、Q3.32ビットの最小固定小数点近似が必要です。

したがって、53 ビットの精度doubleは平方根の十分に正確な近似値を格納するのに十分ですが、32 ビットの整数を掛けた後の結果を格納するには十分ではありません。エラー。cと 32ビット整数の 64 ビット整数 (Q16.48 など) の固定小数点表現をb使用して、96 ビットまたは 128 ビットの数値でマルチワード演算を使用して、十分なエラーを発生させずに比較を行う予定です。結果。これらの 7 平方根のみを使用する構成可能な数を比較するには、これで十分な精度であると確信していますが、セカンドオピニオンに興味があります。何かご意見は?

0 投票する
3 に答える
164 参照

c++ - sqrt で正の値を渡していることをコンパイラに知らせる - C++

私はこれを持っています

そして、a が b より大きいことを知っています。どうすればコンパイラに知らせることができますか?