Math.sin()Node.jsとC#の精度が異なる

パナギオティスドラカトス

カンマの後の最後の桁の精度に問題があります。javascriptコードは、C#コードと比較して1桁少ない桁を生成します。

これが単純なNode.jsコードです

var seed = 45;
var x = Math.sin(seed) * 0.5;
console.log(x);//0.4254517622670592

これが簡単なC#コードです

public String pseudorandom()
{
    int seed = 45;
    double num = Math.Sin(seed) * (0.5);
    return num.ToString("G15");//0.42545176226705922
}

同じ精度を達成する方法は?

サリックスアルバ

JavaScriptの数値タイプは非常に複雑です。浮動小数点数はおそらくIEEE754-2008のように見えますが、いくつかの側面は実装に任されています。http://www.ecma-international.org/ecma-262/6.0/#sec-number-objects sec12.7を参照してください

メモがあります

toStringは、数値を隣接する数値と区別するのに十分な有効数字しか出力しないため、toFixedの出力は一部の値についてtoStringよりも正確な場合があります。例えば、

(1000000000000000128).toString()「1000000000000000100」を(1000000000000000128).toFixed(0)返し、「1000000000000000128」返します。

したがって、完全な桁の精度を得るには、次のようなものが必要です。

seed = 45;
x = Math.sin(seed) * 0.5;
x.toFixed(17);
// on my platform its "0.42545176226705922"

また、sinとcosの実装により、実際のアルゴリズムにさまざまなバリエーションがどのように考慮されるかについての仕様に注意してください。+/- 1ULP以内でのみ保証されます。

Javaを使用すると、印刷アルゴリズムが異なります。17桁を強制しても、結果は0.42545176226705920になります。

Javaを使用してx.toString(2)Double.doubleToLongBits(x)同じビットパターンを取得していることを確認できます

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Math.sin内のMath.radians

分類Dev

Math.cos()とMath.sin()の使い方は?

分類Dev

Math.sin`1`が機能し、Math.sin'1 'が機能しない理由

分類Dev

Math.Round()がC#で異なる動作をする理由

分類Dev

Node.js Math.random()が機能しない

分類Dev

math.floorとmath.ceilの動作が異なります

分類Dev

Math.sin()がStrictMath.sin()にデリゲートするのはなぜですか?

分類Dev

Go定数で「math.Sin」が許可されないのはなぜですか?

分類Dev

math.hライブラリを使用しないSin関数

分類Dev

どのようにmath.sin(にMath.PI * 2)よりもはるかに大きな誤差を持つ(* 2 *、非常に多数にMath.PI)math.sinを避けるために?

分類Dev

Java:ラジアン、Math.cos、Math.sin、doubleおよびlongに関する質問

分類Dev

PythonとPowers Math

分類Dev

PythonとPowers Math

分類Dev

Math.sin(x)の結果をJavaの度の結果に変換する

分類Dev

Math.Sinh()はc#で異なる値を返します

分類Dev

CPythonソースコードでのmath_sin関数の定義?

分類Dev

math.piのPython精度

分類Dev

sin関数にmath.hを使用してエラーを取得すると、理由がわかりません

分類Dev

Lua開発math.sin関数とボールがロッドを横切って移動する

分類Dev

Sin function without using math.h library

分類Dev

AtomicIntegerとMath.max

分類Dev

C#Math.Round Issue

分類Dev

JodaTimeのMath.max(...)

分類Dev

else if math / bigの条件

分類Dev

Math.NetのTriangularSolver

分類Dev

inputValのMath.pow()

分類Dev

整数のMath.Floor

分類Dev

bigIntのMath.exp()?

分類Dev

Math.round() の代替

Related 関連記事

ホットタグ

アーカイブ