Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Деление и округление ......

469
15 марта 2003 года
Sli
71 / / 20.01.2000
Я такого раньше не видел !!!
Проблема такая :
есть 2 компа (оба селики 300) и на них моя прога работает по разному. После долгих мучений я пришел к выводу что на них по разному выполняеться операция деления и округления в функции поиска по по массиву. В выражении участвуют переменные типа int с последующим приведением к нему же:
i+=(int)((t2-t1)/2.0+.5);
Внимание вопрос! как мне от этого глюка избавиться ?
Может я конечно могу ошибаться в причине, поэтому кто сталкивался с подобными вещами помогите плз.
2.0K
16 марта 2003 года
segev
67 / / 19.01.2003
Sli
Цитата:

Я такого раньше не видел !!!


Во-первых если переменные t1 и t2 целочисленные, зачем вообще связываться с вещественными числами. Чем хуже:
i += (t2 - t1) >> 1;
Почему не работает i+=(int)((t2-t1)/2.0+.5) ?
Сложно сказать.
Возможно при нечетной разности значение выражения получается очень близким к целому, но не целым. Преобразование таких вещественных значений к целочисленому типу может давать результаты отличающиеся на единицу. С этим трудно что-то поделать.
А компилятор случайно не BC 3.1 ? Арифметика у него может глючить самым невообразимым образом. Если да, попробуй разбей выражение на несколько частей, обычно помогает.

469
16 марта 2003 года
Sli
71 / / 20.01.2000
Цитата:
Originally posted by segev
Sli

Во-первых если переменные t1 и t2 целочисленные, зачем вообще связываться с вещественными числами. Чем хуже:
i += (t2 - t1) >> 1;



Я посмотрел что сгенерил компилятор, вроде все так как и должно быть, только он не делит на 2 а умножает на 0.5 . А со сдвигом не все так просто, нужно отслеживать тот бит который теряеться т.к. нужно округлять к ближайшему целому (я уже так и сделал ).

469
16 марта 2003 года
Sli
71 / / 20.01.2000
Все отбой, разобрался.
Смог симитировать ошибку. никогда бы не подумал что запрос в БД (Oracle) с упорядочиванием может по разному возвращать данные на разных компах.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог