Приложение QT, скомпилированное в Windows, неправильно выполняет вычисления - PullRequest
0 голосов
/ 05 октября 2011

Я создал свой первый программный продукт с использованием QT и C ++, который отлично работает при компиляции в Ubuntu 11.04 и Mac OS X. Когда я компилирую в Windows, я получаю странный вывод в моем графическом интерфейсе. Я отследил проблему до ошибки вычисления координат краски. Это оскорбительный расчет:

long x = ((pos-from) *width)/range ;

        qDebug() << ***************;
        qDebug() << "pos"   <<"\t" << pos;
        qDebug() << "from"  <<"\t" << from;
        qDebug() << "width" <<"\t" << width;
        qDebug() << "range" <<"\t" << range;
        qDebug() << "x"     <<"\t" << x;
        qDebug() << "***************";

И вывод из Ubuntu:

        *************** 
        pos      2500000 
        from     1 
        width    1005 
        range    4411537 
        x        569 
        *************** 

И вывод из Windows:

        *************** 
        pos      2500000 
        from     1 
        width    1574 
        range    4411537 
        x        -81 
        *************** 

У кого-нибудь есть идея, почему я могу получать разные значения для x?

Приветствие.

Ответы [ 3 ]

2 голосов
/ 05 октября 2011

Если вы используете компиляторы gcc или аналогичные (mingw), тип long составляет 32 бита на 32-битных платформах и 64 бита на 64-битных платформах. Вероятно, ваши некомпилированные "windows" находятся на 64-битных платформах. VC ++ всегда считает long 32-битным. Вы можете попробовать использовать long long int или __int64 (более старый VC ++) (вам нужна только одна из переменных pos, width или range, чтобы быть такого типа, чтобы остальные выгружались).

1 голос
/ 05 октября 2011

Ваше значение width отличается в каждом тесте, поэтому, очевидно, результат будет другим.

1 голос
/ 05 октября 2011
* Длина

в Windows - 32-битная.

Вам следует использовать long long -type, если вы хотите использовать 64-битные len или qint64 при использовании Qt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...