Плавающая точка в Эрланге

Jan 09, 2012 20:42

Let it fail

Вычисления с плавающей точкой в Эрланге точно так же соответствуют парадигме Let it fail, как и всё остальное: при любом чихе вычисления вместо того, чтобы тихонько вернуть -inf, inf или nan, система бросает рантаймовое исключение.

1> 1.0/0.0 ( Read more... )

erlang

Leave a comment

Comments 6

vit_r January 10 2012, 08:11:44 UTC
"bad argument" не слишком полезная информация. Анализ причин каждый раз надо делать самостоятельно?

Reply

gianthare January 10 2012, 08:31:45 UTC
Ну там же написано "called as 1.0/0.0"

Reply


jlarky January 10 2012, 13:47:25 UTC
А что плохого в возвращении '+inf' и '-inf'?

Reply


netch80 May 11 2012, 15:31:26 UTC
Я вот сейчас тоже думаю - какие слова выбрать для внутреннего представления +/-INF...
OTP team вряд ли займётся этим в ближайшие 10 лет.

Reply

lionet May 12 2012, 00:54:21 UTC
1. Хендлинг эксепшнов в операциях FP, приводящих к созданию -inf, +inf, это, я так понимаю, наследник парадигмы "let it fail", и в какой-то части я это поведение поддерживаю. Эрланг - это не фортран, там нужно чтобы всё было под контролем а не сваливалось в бесконечности по дефолту. Вряд ли в телефонии должны возникать бесконечности налево и направо.
2. OTP тим не займётся изменением слов; у них уже и так есть 'MINUS-INFINITY', 'PLUS-INFINITY'.
3. Что касается REAL в ASN.1, я уже договорился с OTP team, что я им просто мой код дам на замену того, что сейчас у них. Там будут тоже атомы 'MINUS-INFINITY', 'PLUS-INFINITY' вместо представлений бесконечностей в is_float().

Reply

eisaev July 8 2020, 15:36:09 UTC
Толи OTP Team не туда свернул, толи ещё что... Но

Erlang/OTP 23 [erts-11.0] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe]

Eshell V11.0 (abort with ^G)
1> asn1ct:compile('RealTest', []).
ok
2> 'RealTest':decode('Real', [9,6,3,48,46,69,43,48]).
{ok,"0.E+0"}
3> 'RealTest':decode('Real', [9,0]).
{error,{asn1,{{badmatch,{0,< [{'RealTest',decode_real,1 ( ... )

Reply


Leave a comment

Up