2017-02-17 43 views
1

Одним из характерных особенностей JA-тяжелого декларативного языка пользовательского интерфейса QML является его включение, казалось бы, избыточных десятичных чисел.Двойной теперь полностью эквивалентен реальному в QML?

Нативные типы объявляют два basic types для десятичных чисел, имена которых аналогичны именам многих других языков программирования: real и double.

В таблице в текущей документации (v5.8) описывает double, как ...

Номер с десятичной точкой, хранится в двойной точности.

... и real ...

Номер с десятичной точкой

Теперь нечетный бит. В предыдущем отрывке можно было предположить, что, как и в случае с большинством языков, это действительно разные типы, основанные на точности с плавающей запятой (см.: float и double в C/C++).

Но это допущение указано неверным. Документация realstates:

Примечания: В QML все вещественные числа хранятся в двойной точности, IEEE с плавающими формата точка.

Этот базовый тип предоставляется языком QML.

Хорошо, немного своеобразно (почему есть два типа в то время), но при условии, что совершенно точная, presumbably было бы целесообразно, чтобы выбрать один (возможно, в зависимости от того был стандарт в вашем коде вы работаете) и смирись с этим.

Но как сообщается, есть неожиданный вопрос, as noted by Kent Hansen on QtDeclarative:

типа «реальный» был задокументирован быть одинарной точности с плавающей точкой, но , что это неправильно. Это всегда было вдвойне.

Однако параметры сигнала типа «real» будут отображаться на C++ типа «qreal», который может быть либо плавающим, либо двойным в зависимости от платформы .

Поскольку числа с плавающей запятой JavaScript имеют двойную точность, QML должен использовать то же самое, чтобы избежать потенциальной потери точности.

Это заставляет меня сомневаться в том, что заявление, данное в документации Qt, является полностью точным. Запись Хансена была 4 года назад, когда Qt/QMLv5.1-2 были последними версиями. Теперь мы находимся в v5.6-8, поэтому я задаюсь вопросом, все еще проблема.

Может ли кто-нибудь ответить, существуют ли какие-либо другие несоответствия в последних версиях выпуска Qt/QML (v5.6-8, по состоянию на февраль 2017 года)?

Именно поэтому включены два отдельных базовых типа для десятичных чисел, несмотря на то, что документация, по-видимому, указывает на то, что они идентичны?

Есть ли другая причина использовать double по сравнению с float или наоборот QML?

ответ

3

Это из-за традиции сохранения обратной совместимости.

В Qt4 это был поплавок. В Qt5 может выполняться старый код с real и double, но для реализации QML-движка больше не нужно беспокоиться о поплавках.

+0

Таким образом, проблема «сигнала», передаваемого в 'float' в' 'C++ ', разрешена? Обратите внимание: автор указал, что проблема была в Qt5. Можете ли вы добавить ссылку на соответствующий трекер ошибок, подтверждающий? Если это так, я могу отметить этот ответ правильно. –

+1

Я все еще думаю, что если вы скомпилируете Qt с флагом '-float', тогда он будет плавать. Похоже, что это не проблема/ошибка, а быстрый взлом производительности для некоторых встроенных платформ. – Velkan

+0

Отлично, я ценю, что окончательное подтверждение/разъяснение ... большая часть кодовой базы, над которой я работаю, использует 'real', поэтому я рад услышать это, так как это означает, что я могу перемещаться по затяжным« двойным »экземплярам, ​​без заботы! Спасибо за спокойствие! –