Одним из характерных особенностей JA-тяжелого декларативного языка пользовательского интерфейса QML является его включение, казалось бы, избыточных десятичных чисел.Двойной теперь полностью эквивалентен реальному в QML?
Нативные типы объявляют два basic types для десятичных чисел, имена которых аналогичны именам многих других языков программирования: real
и double
.
В таблице в текущей документации (v5.8) описывает double
, как ...
Номер с десятичной точкой, хранится в двойной точности.
... и real
...
Номер с десятичной точкой
Теперь нечетный бит. В предыдущем отрывке можно было предположить, что, как и в случае с большинством языков, это действительно разные типы, основанные на точности с плавающей запятой (см.: float
и double
в C/C++).
Но это допущение указано неверным. Документация real
states:
Примечания: В QML все вещественные числа хранятся в двойной точности, IEEE с плавающими формата точка.
Этот базовый тип предоставляется языком QML.
Хорошо, немного своеобразно (почему есть два типа в то время), но при условии, что совершенно точная, presumbably было бы целесообразно, чтобы выбрать один (возможно, в зависимости от того был стандарт в вашем коде вы работаете) и смирись с этим.
Но как сообщается, есть неожиданный вопрос, as noted by Kent Hansen on QtDeclarative:
типа «реальный» был задокументирован быть одинарной точности с плавающей точкой, но , что это неправильно. Это всегда было вдвойне.
Однако параметры сигнала типа «real» будут отображаться на C++ типа «qreal», который может быть либо плавающим, либо двойным в зависимости от платформы .
Поскольку числа с плавающей запятой JavaScript имеют двойную точность, QML должен использовать то же самое, чтобы избежать потенциальной потери точности.
Это заставляет меня сомневаться в том, что заявление, данное в документации Qt, является полностью точным. Запись Хансена была 4 года назад, когда Qt
/QML
v5.1-2
были последними версиями. Теперь мы находимся в v5.6-8
, поэтому я задаюсь вопросом, все еще проблема.
Может ли кто-нибудь ответить, существуют ли какие-либо другие несоответствия в последних версиях выпуска Qt
/QML
(v5.6-8
, по состоянию на февраль 2017 года)?
Именно поэтому включены два отдельных базовых типа для десятичных чисел, несмотря на то, что документация, по-видимому, указывает на то, что они идентичны?
Есть ли другая причина использовать double
по сравнению с float
или наоборот QML
?
Таким образом, проблема «сигнала», передаваемого в 'float' в' 'C++ ', разрешена? Обратите внимание: автор указал, что проблема была в Qt5. Можете ли вы добавить ссылку на соответствующий трекер ошибок, подтверждающий? Если это так, я могу отметить этот ответ правильно. –
Я все еще думаю, что если вы скомпилируете Qt с флагом '-float', тогда он будет плавать. Похоже, что это не проблема/ошибка, а быстрый взлом производительности для некоторых встроенных платформ. – Velkan
Отлично, я ценю, что окончательное подтверждение/разъяснение ... большая часть кодовой базы, над которой я работаю, использует 'real', поэтому я рад услышать это, так как это означает, что я могу перемещаться по затяжным« двойным »экземплярам, без заботы! Спасибо за спокойствие! –