問題タブ [precision]
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.
sql-server - SQL Server のデータ型の精度 - Neo、本当は何ですか?
SQL Server 2000のドキュメント:
次の有効な値を持つ浮動小数点数データです: –3.40E + 38 ~ -1.18E - 38、0 および 1.18E - 38 ~ 3.40E + 38。ストレージ サイズは 4 バイトです。SQL Server では、real の同義語は float(24) です。
SQL Server 2005のドキュメント:
real の ISO シノニムは float(24) です。
編集:私が読んでいるものを考えると、精度は7であると言われていますが、データベース(SQL Server 2005)に最大9を入力できます。同様に、ここで質問番号. 7。
例: 0.180000082
realの真の精度はどのくらいですか? また、精度に影響を与える構成オプション (つまり、互換モード) はありますか?
ruby - Math.sqrt(i*i).floor == i はなぜですか?
これが本当かどうか疑問に思っています: のように、平方整数の平方根を取るとき
に非常に近い浮動小数点数を取得し123
ます。浮動小数点表現の精度により、これは 122.99999999999999999999 または 123.00000000000000000001 のようなものになる可能性があります。
は 122 であるためfloor(122.999999999999999999)
、123 ではなく 122 を取得する必要があります。したがってfloor(sqrt(i*i)) == i-1
、約 50% のケースでそうなることを期待しています。奇妙なことに、私がテストしたすべての数値について、floor(sqrt(i*i) == i
. 以下は、最初の 1 億個の数字をテストするための小さな Ruby スクリプトです。
上記のスクリプトは何も出力しません。どうしてこんなことに?
更新:迅速な返信をありがとう、これが解決策のようです:ウィキペディアによると
絶対値が 2^24 以下の整数は単精度形式で正確に表現でき、絶対値が 2^53 以下の整数は倍精度形式で正確に表現できます。
Math.sqrt(i*i) は、2^53 + 1 である i=9007199254740993 から期待どおりに動作し始めます。
perl - Perlのbignumの精度のレベルを設定するにはどうすればよいですか?
Perlでbignumモジュールを使用しようとしていますが、精度を設定したいと思います。モジュールのCPANページで詳しく説明されているように、これは1つのライナーを介して実行できることを私は知っています。
...これは20〜50桁の精度の平方根を出力しますが、スクリプト内で精度を設定する方法があるかどうか、つまり次のようになります。
私はこれまで運がなかったので、この辺り、グーグル、そしてPerlMonksを検索しました。前もって感謝します。
c# - C# DateTime.Now の精度
単体テストを行っているときに、DateTime.UtcNow で予期しない動作に遭遇しました。DateTime.Now/UtcNow を立て続けに呼び出すと、より正確なミリ秒の増分を取得するのではなく、予想よりも長い時間間隔で同じ値を返すように見えます。
正確な時間測定に適した Stopwatch クラスがあることは知っていますが、誰かが DateTime でこの動作を説明できるかどうか興味がありましたか? DateTime.Now について文書化された公式の精度はありますか (たとえば、50 ミリ秒以内の精度ですか?)。DateTime.Now の精度が、ほとんどの CPU クロックで処理できる精度よりも低くなるのはなぜですか? たぶん、最小公分母のCPU用に設計されているのでしょうか?
c# - C# から SQL float 値への変換
C# と SQL 2005 を使用しています。値0.2のfloat変数を実数型のテーブル列に格納しました。値を確認するためにテーブルを開いたとき、0.200000029 の値が見つかりました... これは既知の問題であり、real は近似型です。ただし、管理スタジオを使用して値を 0.2 に変更し、テーブルをリロードしました。データベースは現在、0.2 の値を示しています。
問題は C# と SQL の間のどこかにあります。C# の値を SQL 管理スタジオのように保存することはできますか? だと思いますが、方法がわかりません。
誰でも助けることができますか?どうもありがとう。
トーマス
c# - C# - 非常に小さい数値の問題 - double データ型の桁数が足りない
非常に小さな数値を計算すると思われるC#でプログラムを書いています。ただし、「double」データ型には小さすぎるため、すべての計算で NaN 値が取得されます。
そのような状況に対処するための C# のオプションはありますか?
ありがとう、エデン。
c++ - 機械の精度
C ++のマシン精度の値を表すepsのようなものがあるのだろうか?ダブルが表すことができる最小の正の数としてそれを使用できますか?doubleが表すことができる最大の正の数として1.0/epsを使用することは可能ですか?C ++とCの両方の標準ライブラリのepsはどこにありますか?
ありがとう、よろしく!
アップデート:
私の目的では、逆距離加重補間( http://en.wikipedia.org/wiki/Inverse_distance_weighting )のようなものについて、距離の逆数として重みを計算したいと思います。
ただし、距離は0にすることができ、重みを計算に適したものにする必要があります。距離dist[i]が0の距離が1つしかない場合は、対応する値values[i]を支配的にしたいと思います。複数の距離が0である場合、それらの値が結果に等しく寄与するようにしたいです。それを実装する方法はありますか?
java - なぜこの方位計算はそれほど不正確なのでしょうか?
それも不正確ですか?私はApfloatの任意精度で全体を再実装しましたが、最初に知っておくべき違いはありませんでした!!
テストの最初のアサーションは次のようになります。
java.lang.AssertionError: 予期:<270.0> でしたが:<270.29389750911355> でした
0.29 はかなり先に見えますか? これは私が実装することを選択した式ですか?
python - Windows 上の Linux の浮動小数点文字列変換動作をエミュレートする
浮動小数点数の出力で厄介な問題に遭遇しました。Windowsで11.545を小数点以下2桁の精度でフォーマットすると、予想どおり「11.55」が出力されます。ただし、Linuxで同じことを行うと、出力は「11.54」です!
私はもともと Python でこの問題に遭遇しましたが、さらに調査したところ、違いは基盤となる C ランタイム ライブラリにあることがわかりました。(アーキテクチャはどちらの場合も x86-x64 です。) C の次の行を実行すると、Python と同様に、Windows と Linux で異なる結果が生成されます。
これをより明確にするために、数値を小数点以下 20 桁まで出力しました ( "%.20f"
):
11.545 を 2 進数として正確に格納できないことはわかっています。そのため、Linux は実際に格納されている数値を可能な限り最高の精度で出力するのに対し、Windows はその数値の最も単純な 10 進数表現を出力します。ユーザーが何を意味する可能性が最も高いかを推測しようとします。
私の質問は、Windows で Linux の動作をエミュレートする (合理的な) 方法はありますか?
(Windows の動作は確かに直感的なものですが、私の場合、Windows プログラムの出力と Linux プログラムの出力を実際に比較する必要があり、変更できるのは Windows の出力だけです。ちなみに、私はの Windows ソースを見てくださいprintf
。ただし、float->string 変換を行う実際の関数は で_cfltcvt_l
あり、そのソースは利用できないようです。)
編集:プロットが厚くなります!これが不正確な表現によって引き起こされるという理論は間違っているかもしれません'%.2f' % 0.125
.
ただし、round(0.125, 2)
Windows と Linux の両方で 0.13 を返します。