From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Wed, 22 Feb 2006 15:56:40 +0300 From: Damir Shayhutdinov To: Andrey Rybak Message-ID: <20060222125640.GH19814@damir.rnd.local> References: <43FC4A2E.5030302@iop.kiev.ua> <20060222115141.GG19814@damir.rnd.local> <43FC5E46.9000909@iop.kiev.ua> Mime-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <43FC5E46.9000909@iop.kiev.ua> User-Agent: Mutt/1.4.2.1i X-Operating-System: ALT Linux Master 2.4 (Citron) X-OriginalArrivalTime: 22 Feb 2006 12:59:31.0968 (UTC) FILETIME=[D2A83000:01C637AF] Cc: =?koi8-r?B?89DJ08/LINLB09PZzMvJINDPIMnT0M/M2NrP18HOycAgxMnT1NLJwtXU?= =?koi8-r?B?ydfP1w==?= ALT Linux Subject: Re: [Comm] value overflow on C X-BeenThere: community@lists.altlinux.org X-Mailman-Version: 2.1.6 Precedence: list Reply-To: ALT Linux Community List-Id: ALT Linux Community List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Feb 2006 12:59:47 -0000 Archived-At: List-Archive: List-Post: On Wed, Feb 22, 2006 at 02:51:18PM +0200, Andrey Rybak wrote: > > > ИМХО глобально решить проблему можно только если использовать другие языки. > > В случае целочисленных выражений проблему можно сгладить, просто взяв int > > тип пошире (например, long long). > > > > > В том то и дело, что взять тип пошире - не кошерно в моем случае. > Расчеты величин проходят в их (величин) зонах сингулярности, где область > значений резко увеличивается даже при малых изменениях аргумента. В > тоже время увеличив ширину типа, я увеличу и так большое время счета. Использование 64битных вычислений позволяет этого избежать. > Поэтому мне надо просто детектировать, что я подошел к предельным > величинам. Просто условными оператороми (if например) эта задача > решается неудовлетворительно. Почему? Даже с флажком от условного перехода (if) вы никуда не денетесь :( > А вопрос у меня возник, потому что помнится мне, что в ассемблере есть > флажок переполнения байта величины (при инкременте например), поэтому > думается мне, что при близости Си к низкоуровнему программированию, > такая фича (определение превышения допустимой величины) должна быть. > Именно поэтому я привел пример с ERANGE. > > Есть еще идеи? Написать на асме функцию сложения, использующую этот флаг и использовать ее, определив как inline для ускорения например. Правда это непортабельно. -- WBR, Damir Shayhutdinov