2017-02-17 12 views
1

JS重い宣言的ユーザーインターフェース言語QMLの特有の側面の1つは、一見冗長な10進数の型を含んでいます。QMLで倍精度はRealと完全に等価ですか?

ネイティブタイプは、他の多くのプログラミング言語の名前に似た10進数の2つのbasic typesを宣言します。realおよびdoubleです。

現在のドキュメント(v5.8)のテーブルは、倍精度に格納されている小数点

番号、...としてdoubleを記述する。小数点今

...とreal ...

ため

数奇数ビット。前の節では、ほとんどの言語と同様に、浮動小数点精度に基づいた実際に異なる型であると信じています(C/C++のfloatおよびdoubleを参照してください)。

しかし、その前提は正しくないと示されています。 realstatesのドキュメント:

注:QMLで全ての実数は、倍精度に格納されている、IEEE浮動小数点形式 。

この基本タイプは、QML言語によって提供されます。 (おそらくあなたが取り組んでいるあなたのコードベースで標準だった方)、

オーケービット特有(なぜ2つのタイプを持っている)が、presumbablyそれが1つを選ぶために理にかなって、それが完全に正確であると仮定し、それと一緒に行く。

しかし、報道に予期しない問題があります、as noted by Kent Hansen on QtDeclarative:単精度浮動小数点数であることが記載されていました

タイプ「本物」が、間違ってい 。それはいつも二重です。

しかし、タイプ「real」の信号パラメータは、 プラットフォームに応じてfloatまたはdoubleのいずれかになることができるC++ タイプ「qreal」にマップされます。

JavaScriptの浮動小数点数は倍精度であるため、QML は、精度の潜在的な損失を避けるため、同じものを使用する必要があります。

Qtの文書に記載されている記述が完全に正確かどうかは疑問です。 Hansenの投稿は4年前のことで、Qt/QMLv5.1-2の最新版でした。今私達は​​にいるので、彼が報告していることがまだ問題であるかどうか疑問に思います。

Qt/QMLリリースバージョン(​​、2017年2月現在)にこの矛盾が存在するかどうかは、誰でも回答できますか?

文書には同じであることが明白に示されているにもかかわらず、10進数の2つの別々の基本タイプが含まれているのはなぜですか?

に対してdoubleを使用する他の理由はありますか?QMLにはその逆がありますか?

答えて

3

これは、下位互換性を維持するという伝統のためです。

Qt4ではフロートでした。 Qt5では、realdoubleの古いコードを実行できますが、QMLエンジンの実装ではもう浮動小数点数を気にする必要はありません。

+0

したがって、 'signal'の問題は 'C++'コードの 'float'にキャストされて解決されますか?著者が「Qt5」に問題があることを示したことに注意してください。適切なバグトラッカーへのリンクを追加して確認できますか?もしそうなら、私はこの答えを正しいものにすることができます。 –

+1

Qtを '-float'フラグでコンパイルすると、まだフロートしていると思います。いくつかの組み込みプラットフォームでは、問題やバグではなく、速いパフォーマンスハックと思われます。 – Velkan

+0

最後に確認/明確化していただきありがとうございます...私が作業しているコードベースのほとんどは「本物」を使用していますので、残念ながら「ダブル」インスタンスを移動することができます。心配!心の安堵をありがとう! –

関連する問題