C ++ int float casting

Для быстрого-и-грязного, нечастого использования, эти %INC лучший способ пойти. Если необходимо сделать это с непрерывным интеграционным тестированием или чем-то более устойчивым, существуют некоторые другие инструменты для помощи.

Steffen уже упомянул Модуль:: ScanDeps.

код в Тест:: Prereq делает это, но он имеет дополнительный слой, который гарантирует что Ваш Make-файл. МН или Сборка. МН перечисляет их как зависимость. При создании Вашего , сценарии похожи на нормальное распределение Perl , который делает довольно легким проверить на новые зависимости; просто выполните набор тестов снова.

, Кроме которого, Вы могли бы использовать инструмент такой в качестве Модуль:: Извлечение:: Используйте , который анализирует статический код, ища использование, и потребуйте операторов (хотя это не найдет их в строке evals). Это получает Вас просто модули, которые Вы сказали Вашему сценарию загружать. Кроме того, как только Вы знаете, какие модули Вы загрузили, можно объединить это с David Cantrell инструмент CPANdeps, который уже создал дерево зависимостей для большинства модулей CPAN.

Примечание, что также необходимо думать о дополнительных функциях также. Ваш код в этом случае, мои не имеют их, но иногда Вы не загружаете модуль, пока Вам не нужен он:

sub foo
    {
    require Bar; # don't load until we need to use it
    ....
    }

, Если Вы не осуществляете ту функцию в своем пробном прогоне или тесте, Вы не будете видеть необходимость в Панели для той функции. Подобная проблема подходит, когда модуль загружается, различный набор модулей зависимости в различной среде (скажите, mod_perl или Windows, и так далее).

нет хорошего, автоматизированного способа протестировать дополнительные функции как этот так, можно получить их зависимости. Однако я думаю, что это должно быть в моем Списке текущих дел, так как он походит на интересную проблему.

26
задан el_pup_le 29 December 2012 в 11:43
поделиться

3 ответа

Происходит целочисленное деление, затем результат, который является целым числом , присваивается как число с плавающей точкой Если результат меньше 1, он заканчивается как 0.

Вы захотите привести выражения к плавающим перед делением, например,

float m = (float)(a.y - b.y) / (float)(a.x - b.x);
43
ответ дан 28 November 2019 в 06:07
поделиться

Вы должны знать, что при оценке выражения, содержащего целые числа, временные результаты каждого этапа оценки также округляются до целых чисел. В вашем назначении float m значение преобразуется только в тип float с поддержкой действительных чисел после целочисленной арифметики. Это означает, что, например, 3/4 уже будет значением «0», прежде чем станет 0,0. Вы должны заставить преобразование плавать, чтобы это произошло раньше. Вы можете сделать это, используя синтаксис float(value) для любого из a.y, b.y, a.x, b.x, a.y - b.y или a.x - b.x: не имеет значения, когда это будет сделано, пока один из терминов - это число с плавающей точкой до деления, например

float m = float(a.y - b.y) / (a.x - b.x); 
float m = (float(a.y) - b.y) / (a.x - b.x); 
...etc...
1
ответ дан 28 November 2019 в 06:07
поделиться

если (a.y - b.y) меньше (a.x - b.x), m всегда равно нулю.

так что произносите это так.

float m = ((float)(a.y - b.y)) / ((float)(a.x - b.x));
-1
ответ дан 28 November 2019 в 06:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: