[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