問題タブ [significant-digits]
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.
c# - 「G」標準フォーマット文字列を使用して Double をフォーマットすると、完全な文字列が返されないのはなぜですか?
これを十分に調査して、私の前提が完全に的外れでないことを願っています。もしそうなら、そこにいる数学者は私を正すことができます.
私の前提は、 のDouble
ような値は として有効数字 5桁(小数点以下ではありません)12.5
に丸められるべきであるということです。代わりに、次の C# コードを使用すると、次のようになります。12.500
12.5
私の問題を反映しているように見える2007年のこの投稿に出くわしました。実際、一貫性を保つために、これらの例の数値を使用しています。
ここでの私の目標は、次のことをよりよく理解することです。
sig figs の私の理解は数学的に正しいですか? つまり、私の期待は妥当でしょうか、それとも出力 "12.5" は何らかの形で正しいのでしょうか?
これは本当にフレームワークの (非常に長命の) バグですか? もしそうなら、それは修正できますか?
バグだとしたら、どうすればいいですか?実際に返されたsig fig の数を特定するためのハックを作成し、それをパディングしますか? 「G」フォーマット文字列が行うべきことを行うために、独自のコードをロールバックしますか? 私はすでに SO でこの例に出くわしているので、おそらくそれはクリーンなオプションが存在しないという証拠です。
さらに、ストレージの問題Double
がこの問題の丸めの側面に悪影響を与える可能性があることを認識していますが、今のところ、元の数字よりも多くの sig fig の問題にのみ関心があります。
編集: フレームワーク 4.5 までこれをテストしました。
r - 有効数字 2 桁の formatC を使用した奇妙な出力
を使用して有効数字 2 桁の数値をフォーマットしたいformatC
。しかし、それは奇妙な振る舞いをしています。数値は次のとおりです。
結果は次のとおりです。
ケース 5 では、 2ではなく2.0を期待していました。これについての説明はありますか?パラメータの定義に何か問題がありましたか?
java - 丸めずに有効数字3桁の文字列を書く方法
有効数字 3 桁の変換文字列値が必要です。
私はこのコードを使用しています:
結果は end= 0.000 です。しかし、私は end = 0,920 を取得したいです。どうやってやるの?
sql-server - RODBC は、MS SQL への sqlSave を使用して数値列の精度を失います (そして Date で失敗します)
sqlSave を使用して ms sql に保存すると、RODBC が数値列の精度を失うのはなぜですか?
数字
Rで、数値列を含む次のデータフレームを作成します。既に丸められているように見えるかもしれませんが、これは印刷上の問題であり、丸められていません。
データベースに保存すると、一部の精度が失われていることが示されているようです。
データベースからデータフレームを取得することで、精度が実際に失われていることを確認できます。
float は正しい列タイプのようですが、rodbc に文字変換の代わりに使用させる方法はありますか? デフォルトの as.character でも機能します。
日付
Date クラスの列は float 型の ms sql 列になり、誤った値が格納されます。
日付は式として解釈されるため、次のようになります。
java - javaでコンマの後に有効数字2桁でフォーマットする
小数部分にのみ適用される有効数字でフォーマットする NumberFormat 構成を探しています (整数部分と小数部分の両方には適用されません)。
次の例で期待される結果は次のとおりです (分数部分に 2 つの有効値が適用されます)。
有効数字でフォーマットするための解決策はたくさんありますが、整数部分にも適用されます。解決策は、DecimalFormat と BigDecimal の使用を組み合わせることだと思います。
回答ありがとうございます ;)
c - GMP最上位桁
GNU Multiple Precision (GMP) ライブラリを使用して、任意精度の整数に対していくつかの計算を実行しています。次に、結果の 10 進数が必要です。しかし、それらのすべてではありません: たとえば、100 桁の最上位桁 (つまり、数字が始まる数字) または数字の中間から選択された範囲の数字 (たとえば、1000 の数字 100..200) -桁数)。
GMPでそれを行う方法はありますか?
ドキュメントには、10 進数の範囲を文字列として抽出する関数が見つかりませんでした。mpz_t
文字列に変換する変換関数は、常に数値全体を変換します。基数のみを指定できますが、開始/終了桁は指定できません。
数字全体を巨大な文字列に変換して、その一部だけを取り出して残りを捨てる以外に、それを行うより良い方法はありますか?
編集:私が必要とするのは、数値の精度を制御したり、特定の固定桁数に制限したりすることではなく、任意の精度の数値の桁文字列から桁のサブセットを選択することです。
必要なものの例を次に示します。
7 1316831 = 19821203202357042996...2076482743
実際の番号は 1112852 桁で、これを に縮小しました...
。
今、私が必要としているのは、この膨大な数の文字列から任意に選択された部分文字列だけです。たとえば、最上位10桁 (1982120320
この場合)。または、1112841番目から 1112849番目までの数字(21203202
この場合)。または、1112841番目の位置 (2
この場合) の 1 桁だけです。
最初に GMP 番号を 10 進数の文字列に変換する場合mpz_get_str
、これらの数字のごく一部を使用して残りを破棄するために、これらの数字に膨大な量のメモリを割り当てる必要があります。(言うまでもなくmpz_t
、バイナリ表現の元の数はすでにかなりの量を消費しています。)
matlab - Floating point error in MATLAB - linearly spaced vectors
OS: Win 7 64bit. Matlab: 2014a, 2015a
When I create a vector as follows:
I get:
which is expected. Now when I want to see whether 0.6 exists in my vector I type:
and I get: 0 0 0 0 0
find(a == 0.6)
also return an Empty matrix: 1-by-0
These are unexpected. It is able to find all the other values, but for 0.6 there is a problem. I think although 0.6 is created it is actually 0.600000000000000001 or something similar, which is a problem. You can see that this is the case by a > 0.6
and will get 0 0 1 1 1
.
1-First of all why is this happening?
2-Second are we able to see the whole value of a number in Matlab, if so what is the function or setting for that?
I created the same vector using linspace
, but that also did not help. I have found a solution to this by typing : a = roundn(a, -10)
. However, I think that such a solution should not even be needed at the first place.
3-Is there a better way to order Matlab to yield exact values?
Thank you all for your help.