Я наконец понял, как использовать Maven. Из Eclipse создайте новый проект Maven.
Загрузите Maven, извлеките архив, добавьте папку /bin
в путь.
Проверить установку из командной строки, запустив mvn -v
(будет печатать версию и путь установки java)
Изменить на корневую папку проекта (где находится pom.xml
) и запустить :
mvn dependency:copy-dependencies
Все jar-файлы загружаются в /target/dependency
.
Чтобы установить другой выходной каталог:
mvn dependency:copy-dependencies -DoutputDirectory="c:\temp"
Теперь можно повторно использовать этот проект Maven для всех загрузок зависимостей, изменив pom.xml
Добавить jars в java-проект по пути сборки -> настроить путь сборки -> библиотеки -> добавить JAR ..
Используете ли вы directx в своей программе где-либо, поскольку это приводит к переключению блока с плавающей запятой в режим одинарной точности, если вы специально не укажете, чтобы не делать этого при создании устройство и вызовет именно это
Интересно, что если вы объявите a и b как числа с плавающей точкой, вы получите ровно 11917835.000000000. Поэтому я предполагаю, что где-то происходит преобразование в одинарную точность, либо в том, как константы интерпретируются, либо позже в вычислениях.
Любой случай немного удивителен, учитывая, насколько прост ваш код. Вы не используете какие-либо экзотические директивы компилятора, форсирующие одинарную точность для всех чисел с плавающей запятой?
Редактировать: Вы действительно подтвердили, что скомпилированная программа выдает неверный результат? В противном случае наиболее вероятным кандидатом для (ошибочного) преобразования с одинарной точностью будет отладчик.
Я предполагаю, что вы печатаете номер без указания точности. Попробуйте следующее:
#include <iostream>
#include <iomanip>
int main() {
double a = 3015.0;
double b = 0.00025298219406977296;
double f = a/b;
std::cout << std::fixed << std::setprecision(15) << f << std::endl;
return 0;
}
Это дает:
11917834.814763514000000
Что мне кажется правильным. Я использую VC ++ 2008 вместо 2005, но я предполагаю, что разница в вашем коде, а не в компиляторе.
Вы уверены, что проверяете значение f сразу после инструкции fstp? Если у вас включена оптимизация, возможно, окно просмотра может показывать значение, полученное в какой-то более поздний момент (это кажется немного правдоподобным, поскольку вы говорите, что смотрите на дробную часть f позже - некоторые инструкции маскируют его каким-то образом?)
Если вам нужна точная математика, не используйте числа с плавающей запятой.
Сделайте себе одолжение и получите библиотеку BigNum с поддержкой рациональных чисел.