[Comm] value overflow on C
Damir Shayhutdinov
=?iso-8859-1?q?damir_=CE=C1_tecon=2Eru?=
Ср Фев 22 15:56:40 MSK 2006
On Wed, Feb 22, 2006 at 02:51:18PM +0200, Andrey Rybak wrote:
>
> > ИМХО глобально решить проблему можно только если использовать другие языки.
> > В случае целочисленных выражений проблему можно сгладить, просто взяв int
> > тип пошире (например, long long).
> >
> >
> В том то и дело, что взять тип пошире - не кошерно в моем случае.
> Расчеты величин проходят в их (величин) зонах сингулярности, где область
> значений резко увеличивается даже при малых изменениях аргумента. В
> тоже время увеличив ширину типа, я увеличу и так большое время счета.
Использование 64битных вычислений позволяет этого избежать.
> Поэтому мне надо просто детектировать, что я подошел к предельным
> величинам. Просто условными оператороми (if например) эта задача
> решается неудовлетворительно.
Почему? Даже с флажком от условного перехода (if) вы никуда не денетесь :(
> А вопрос у меня возник, потому что помнится мне, что в ассемблере есть
> флажок переполнения байта величины (при инкременте например), поэтому
> думается мне, что при близости Си к низкоуровнему программированию,
> такая фича (определение превышения допустимой величины) должна быть.
> Именно поэтому я привел пример с ERANGE.
>
> Есть еще идеи?
Написать на асме функцию сложения, использующую этот флаг и использовать ее,
определив как inline для ускорения например. Правда это непортабельно.
--
WBR,
Damir Shayhutdinov
Подробная информация о списке рассылки community