[Moscow.pm] WTF?

Павел Тимонин gg.error на gmail.com
Вт Дек 23 02:39:52 PST 2008


конечно не перловая - в с++ компилятор даже предупреждает, что сравнение
чисел с плавающей точкой на равенство - неправильная операция, и она почти
всегда выдаёт false. однако паскаль сравнивает - но он это делает с
округлением до 10-го, кажется, знака. но в целом - предпочтителен вариант с
разностью; на плюсах я писал что-то вроде (!(a<b)&&!(a>b)) - при этом как
раз вычисления идут с точностью машинного epsilon и не надо его вычислять.
возможно неудобно городить такой огород - можно написать sub )) PS а ещё
можно перегрузить оператор сравнения.

23 декабря 2008 г. 13:17 пользователь Alexander Lourier <aml на rulezz.ru>написал:

> On Tuesday 23 December 2008 13:09:38 Yuri Pac wrote:
>
> > $ perl -MData::Dumper -e 'print Dumper( 15.50 eq 15.5 )'
> > $VAR1 = 1;
> > $ perl -MData::Dumper -e 'print Dumper( '15.50' eq '15.5' )'
> > $VAR1 = 1;
> > $ perl -MData::Dumper -e 'print Dumper( '15.50000' eq '15.5' )'
> > $VAR1 = 1;
> > $ perl -MData::Dumper -e 'print Dumper( '15.50000' == '15.5' )'
> > $VAR1 = 1;
> > $ perl -MData::Dumper -e 'print Dumper( "15.5000" eq "15.5" )'
> > $VAR1 = '';
> > $ perl -MData::Dumper -e 'print Dumper( "15.5000" == "15.5" )'
> > $VAR1 = 1;
>
> Проблема не перловая, на самом деле. Решение или abs(X1 - X2) < $epsilon,
> как
> уже посоветовали, либо вид сбоку на то же самое - Math::FixedPrecison. Есть
> ещё Math::BigFloat - там по-другому арифметика делается. Может, подойдет.
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
----------- следущая часть -----------
Вложение в формате HTML было извлечено&hellip;
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20081223/594d04cb/attachment.html>


Подробная информация о списке рассылки Moscow-pm