Quantcast

spf4

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

spf4

Victor Korolev
 Добрый день

  Странное поведение слова */ , попробовал старую программу перенести
  на spf4 (масштабирует поток числовых входных данных)
  и в какой-то момент происходит "падение" программы, долго не мог понять
причины,
  а им оказалось слово */ .

  1000000 100000 100 */  - работает
  1000000 100000 10 */   - Exception

  Так и должно быть? Понятно, что произошло переполнение, но надо ли
  из-за этого вываливать программу (не сохранненые данные, нервы и т.д.)
  Мне кажется лучше было бы выдавать неверный результат, чем ошибку.
  В некоторых системах подобная ситуация выдает результате число -1
  (максимальное число в данной разрядности системы) что вполне логично.

  Тоже можно сказать и о делении на 0 , не всегда это должна быть причина
для Exception
  (подобная ситуация вполне может возникнуть при решении геометрических
формул dx/dy,
   да и просто в ошибке программиста, кто не ошибается?)
  Мне думается тоже результатом должно быть число -1.

  Намного легче проконтролировать результат, чем причину нестабильности ПО.

  С  уважением Виктор К.



-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: spf4

Andrey Cherezov
Добрый день, [hidden email]!

Лучше получить EXCEPTION, чем неверный результат.
Исключение поймать можно ['] */ CATCH (и не будет падения программы и
нервов),
и обработать, а отличить неправильный -1 от правильного -1 сложнее.
Не помню, что там у нас стандарт говорит насчет переполнения */ ?

Ваше сообщение от 14.03.2008 15:14:
>   1000000 100000 100 */  - работает
>   1000000 100000 10 */   - Exception
>
>   Так и должно быть? Понятно, что произошло переполнение, но надо ли
>   из-за этого вываливать программу (не сохранненые данные, нервы и т.д.)
>   Мне кажется лучше было бы выдавать неверный результат, чем ошибку.
>   В некоторых системах подобная ситуация выдает результате число -1
>  


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: spf4

Victor Korolev
> Добрый день, [hidden email]!
>
> Лучше получить EXCEPTION, чем неверный результат.
> Исключение поймать можно ['] */ CATCH (и не будет падения программы и
> нервов),
> и обработать, а отличить неправильный -1 от правильного -1 сложнее.
> Не помню, что там у нас стандарт говорит насчет переполнения */ ?
>

 Не логичное поведение слова */
 Слова * + при переполнении дают неверный результат и не вызывают
 EXCEPTION, чем отличилось */ ?




-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: spf4

Andrey Cherezov
Добрый день, [hidden email]!

Ваше сообщение от 14.03.2008 15:56:
>  Не логичное поведение слова */
>  Слова * + при переполнении дают неверный результат и не вызывают
>  EXCEPTION, чем отличилось */ ?
>  
+ дает верный результат, только обрезанный, и там есть об этом спец.флаг.
А как обрезать бесконечность и прочие неопределенные результаты до
разумного результата
- это вопрос. Вон в float'ах вроде есть особое представление
бесконечности (я в этом не спец),
и там обходятся без исключений.

А если не логично, неудобно, лениво переделывать старый код, и т.д., и
если -1 годится,
то просто поставить
: */ ['] */ CATCH IF 2DROP DROP -1 THEN ;
перед включением этого кода, делов-то.

: */ ['] */ CATCH IF 2DROP DROP -1 THEN ; ' NOOP TO <EXC-DUMP>
1000000 100000 100 */ .
1000000 100000 10 */ .

1000000000 -1
 Ok

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: spf4

Ruvim Pinka
In reply to this post by Victor Korolev
День добрый!

2008/3/14 <[hidden email]>:
  1000000 100000 100 */  - работает
 1000000 100000 10 */   - Exception

 Так и должно быть? Понятно, что произошло переполнение,
[...]
 Тоже можно сказать и о делении на 0 , не всегда это должна быть причина
для Exception

Возможно, подойдет такой вариант:

REQUIRE DU/MOD ~pinka/lib/BigMath.f
: *U/ ( u1 u2 u3 --  -1|u4 ) >R M* R> S>D DU/MOD IF DROP -1 THEN NIP NIP ;
: / ( n1 n2 -- 0|n3 ) DUP IF / EXIT THEN NIP ;

Более низкоуровневыми являются exceptionable-версии (по сравнению с приведеными), поэтому именно они должны быть легко доступны в системе, — иначе аналогично-простым переопределением отловить исключение будет затруднительно.


--
Ruvim
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Loading...