Форум программистов, компьютерный форум CyberForum.ru

Ввод 0 с помощью scanf и правильное сравнение с 0 - C++

Восстановить пароль Регистрация
 
dontgiveafk
36 / 16 / 0
Регистрация: 29.01.2010
Сообщений: 252
08.12.2010, 19:43     Ввод 0 с помощью scanf и правильное сравнение с 0 #1
считываю данные в переменную double t; scanf("%f",&t); переменная типа double , а не float, но как я понимаю visual studio компилятору на это плевать если написать float t; scanf("%f",&t); или double t; scanf("%d",t); получаю если ввожу 0 на выходе t=1.5562361260361986e-303 я так понял, что это машинный ноль. Пытаюсь сделать сравнение t>0.0 && t<0.5 получаю false как так ведь этщ число лежит в этих пределах. Как мне правильно сравнить это число с настоящим 0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.12.2010, 19:43     Ввод 0 с помощью scanf и правильное сравнение с 0
Посмотрите здесь:

Запись/чтение полей классов с помощью scanf/printf C++
Файловый ввод/вывод с использованием scanf(); C++
Ввод/вывод через printf() и scanf() C++
Ввод выражения с помощью getche() C++
Ограничение на ввод символов scanf() и cin C++
C++ Ввод строки в структуре, заданной как char *str через scanf (ПОМОЩЬ)
C++ Ввод данных в массив с помощью типизированных констант
C++ Ввод данных как с клавиатуры, так и с помощью ДПСЧ

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
08.12.2010, 20:06     Ввод 0 с помощью scanf и правильное сравнение с 0 #2
Может вводить 0.0 ? Хотя странно, не разу с таким не сталкивался.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
08.12.2010, 20:20     Ввод 0 с помощью scanf и правильное сравнение с 0 #3
Цитата Сообщение от dontgiveafk Посмотреть сообщение
или double t; scanf("%d",t);
"%d" -это для int

Добавлено через 27 секунд
для double - "%f"
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
08.12.2010, 20:25     Ввод 0 с помощью scanf и правильное сравнение с 0 #4
Да, я сразу обратил на это внимание, но значение этому не придал. Сейчас читаю книгу по фортрану, там написанно, что при преобразовании из целочисленного типа в вещественный тоже происходит потеря точности (я в сишной лит-ре такого не встречал, и думал, что потеря точность может быть только при преобразовании из вещественного типа в целочисленый). Так вот - результат t=1.5562361260361986e-303 очень похож на ту самую потерю точности. Происходит это потому, что считывается целочисленный ноль, а потом преобразовывается в вещественный.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
08.12.2010, 22:20     Ввод 0 с помощью scanf и правильное сравнение с 0 #5
Цитата Сообщение от dontgiveafk
scanf("%f",&t); переменная типа double
C
1
    scanf("%lf", &t);
у double и float разные размеры, они по-разному интерпретируются, одна последовательность бит, рассматриваемая в виде float, для double будет вообще другое значение иметь

0 и -0
000... - это ноль
100... - это минус ноль
C
1
2
3
4
5
6
7
#include <stdio.h>
 
int main(void)
{
    printf("%f %f" "\n", 0., -0.);
    return 0;
}
Код
[guest@localhost tests]$ ./t
0.000000 -0.000000
[guest@localhost tests]$
Yandex
Объявления
08.12.2010, 22:20     Ввод 0 с помощью scanf и правильное сравнение с 0
Ответ Создать тему
Опции темы

Текущее время: 04:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru