C: цикл while с плавающей запятой никогда не завершается

На странице файла menpo показано, что двоичный файл OpenCV 3.2 существует только для Python 2.7 / 3.4 / 3.5 и на платформе linux-64

Вы можете перейти на сайт этого , чтобы получить нужную вам версию.

  • opencv_python‑3.2.0‑cp36‑cp36m‑win_amd64.whl является основным.
  • opencv_python‑3.2.0+contrib‑cp36‑cp36m‑win_amd64.whl - тот, который содержит модули opencv-contrib таких как модуль text для привязки к движку OCR tesseract и многие другие.

Оба двоичных файла для OpenCV 3.2 с привязкой Python 3.6 для Windows 64-bit. Чтобы установить его, 1) загрузите двоичный файл на локальный диск, 2) откройте командную строку Anaconda и 3) введите команду ниже в каталог, в котором находится бинарный файл.

pip install opencv_python‑3.2.0+contrib‑cp36‑cp36m‑win_amd64.whl

Надеюсь на эту помощь.

Обновление 2018-02-22:

Кодированные файлы OpenCV 3.4.0 теперь доступны на неофициальном сайте и заменены OpenCV 3.3.0

3
задан David Jones 25 March 2019 в 09:46
поделиться

2 ответа

Почему код был циклом навсегда?

Типичный float может точно представлять около 2 32 чисел, 0.1 не является одним из них. Так что код больше похож.

float f = 1.0;
while (f != 0.0) {
  f = f - a_number_close_to_one_tenth;
  printf("%.1f\n", f);
}

Повторные вычитания "пропустить" 0,0.


Вместо этого используйте >=, и код будет повторять ожидаемое количество раз (или, может быть, еще раз). Используйте печать с более высокой точностью, чтобы понять почему.

float f = 1.0;
while (f >= 0.0) {
  f = f - a_number_close_to_one_tenth;
  printf("%.17e\n", f);
}
0
ответ дан chux 25 March 2019 в 09:46
поделиться

Это проблема с плавающей запятой. Попробуйте > вместо !=

float f = 1.0;
while (f > 0.0) {
    f = f - 0.1;
    printf("%.1f\n", f);
}
0
ответ дан Kevin Vandy 25 March 2019 в 09:46
поделиться
Другие вопросы по тегам:

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