問題タブ [unit-class-library]
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# - 精度の問題を修正する方法
単位を扱うための同じ基本概念に従ういくつかのクラスがあります。
単体テストで使用される簡単な例を次に示します。
他の基本的な単位の種類をカバーする、このデモの角度クラスのようないくつかのクラスを作成しました。
精度の問題があることが明らかになった特定のクラスは、長さの単位を処理するクラスの使用でした。Dimension
私は、この Dimension クラスを基本ユニット タイプとして利用する基本的なジオメトリ ライブラリの構築を支援しました。たとえば、Point クラスは次のとおりです。
線やその他の形状には、このポイント クラスを使用して構築されたディメンションと端点によって表される長さなどのプロパティがあります。
これらの線がすべて平行かどうかを確認しようとすると、問題が明らかになります。この関数のように:
高すぎる精度をチェックしているため、false が返されることがよくあります。ポイントとラインで回転と平行移動を行った後、true を返したいときに、この関数が false を返すようにするのに十分なだけ丸めが加算されます。
そう:
次の選択肢のうち、正しい/より良い選択肢はどれですか?
IsParallelTo
数値が比較的近い (例: 0.0001 インチ以内)などの関数でチェックを行うだけです。
If(Math.Abs(thing.x - thing2.x) < .0001)
- 構成ファイルから引き出された可変定数を使用して以前のアイデアを改善し、ユーザーが希望する許容偏差を選択できるようにします。
If(Math.Abs(thing.x - thing2.x) < Properties.AcceptedDeviationConstant)
- またはディメンション クラスのルート レベルで問題を軽減します。
同じ戦略を使用できます
実際にはこのようになりますが、上記の方が理解しやすいです
return (Math.Abs(this.GetValue(this.InternalUnitType) - ((Dimension)(obj)).GetValue(this.InternalUnitType))) < Constants.AcceptedEqualityDeviationConstant;
または最後に、私の最後のアイデアは、単位クラスのすべてを (寸法、角度など) のDecimal
代わりに基本単位に置き換えDouble
、どういうわけか (それを調べた後) それが役立つかどうかを判断することです。
クラスの等価演算の精度の一貫性を向上させる方法と場所は?
ps ライブラリはオープンソースであり、見つけることができます (Units hereおよび Geometry here )
c# - nuget パッケージの必要なバージョンはどのように定義されていますか?
nuget パッケージのバージョン番号がどのように決定されるかを判断しようとしています。
これは packages.config ファイルにあると想定しました。packages.config ファイルでは、これが探しているバージョン番号です。<package id="UnitClassLibrary" version="1.1.0" targetFramework="portable-net40+sl40+win+wp" />
同様に、.csproj ファイルでは、<Reference Include="UnitClassLibrary, Version=1.1.0, Culture=neutral, processorArchitecture=MSIL">
.
したがって、これらのファイルの両方でバージョン 1.1.0 の必要性を定義しました。ただし、nuget 復元コマンドを実行しようとするUnable to find version '1.10' of package 'UnitClassLibrary'.
と、nuget バージョンが として定義されている場所が見つからないと報告され1.10
ます。
c# - オブジェクトを逆シリアル化できるように JsonConstructor を構築する
私は JSON.net を使用しており、オープンソースの UnitClassLibrary から Distance オブジェクトをシリアライズおよびデシリアライズしようとしています。現在、次の JSON としてシリアル化されたオブジェクトがあります。
これらのいずれかを取得し、このクラスを使用して距離オブジェクトに変換できます。たとえば、最後のアーキテクチャ文字列を使用すると、次のコンストラクターを使用できます。
または、1 インチの 32 分の 1 を使用して、次のことができます。
ただし、JsonConstructor (JSON.net が具体的に使用できるコンストラクターのタイプ) を記述して、JSON 文字列をJsonConvert.DeserializeObject<Distance>(json);
.
新しい距離オブジェクトを取得するコンストラクタを作成するにはどうすればよいですか?