конечно не перловая - в с++ компилятор даже предупреждает, что сравнение чисел с плавающей точкой на равенство - неправильная операция, и она почти всегда выдаёт false. однако паскаль сравнивает - но он это делает с округлением до 10-го, кажется, знака. но в целом - предпочтителен вариант с разностью; на плюсах я писал что-то вроде (!(a<b)&&!(a>b)) - при этом как раз вычисления идут с точностью машинного epsilon и не надо его вычислять. возможно неудобно городить такой огород - можно написать sub )) <div>
PS а ещё можно перегрузить оператор сравнения.<br><br><div class="gmail_quote">23 декабря 2008 г. 13:17 пользователь Alexander Lourier <span dir="ltr"><<a href="mailto:aml@rulezz.ru">aml@rulezz.ru</a>></span> написал:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="Ih2E3d">On Tuesday 23 December 2008 13:09:38 Yuri Pac wrote:<br>
<br>
> $ perl -MData::Dumper -e 'print Dumper( 15.50 eq 15.5 )'<br>
> $VAR1 = 1;<br>
> $ perl -MData::Dumper -e 'print Dumper( '15.50' eq '15.5' )'<br>
> $VAR1 = 1;<br>
> $ perl -MData::Dumper -e 'print Dumper( '15.50000' eq '15.5' )'<br>
> $VAR1 = 1;<br>
> $ perl -MData::Dumper -e 'print Dumper( '15.50000' == '15.5' )'<br>
> $VAR1 = 1;<br>
> $ perl -MData::Dumper -e 'print Dumper( "15.5000" eq "15.5" )'<br>
> $VAR1 = '';<br>
> $ perl -MData::Dumper -e 'print Dumper( "15.5000" == "15.5" )'<br>
> $VAR1 = 1;<br>
<br>
</div>Проблема не перловая, на самом деле. Решение или abs(X1 - X2) < $epsilon, как<br>
уже посоветовали, либо вид сбоку на то же самое - Math::FixedPrecison. Есть<br>
ещё Math::BigFloat - там по-другому арифметика делается. Может, подойдет.<br>
<div><div></div><div class="Wj3C7c">--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
</div></div></blockquote></div><br></div>