![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| XoRe |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 18.2.2009 Репутация: нет Всего: нет |
Скрипт:
------------------------------ #!/usr/bin/perl $a = 601; foreach $b (0..9) { $c = $a + $b / 10; print "$c: " . (($c * 100) - ($c * 10 * 10)) . "\n"; } ------------------------------ Выдает: 601: 0 601.1: 0 601.2: 7.27595761418343e-12 601.3: -7.27595761418343e-12 601.4: 0 601.5: 0 601.6: 0 601.7: 7.27595761418343e-12 601.8: -7.27595761418343e-12 601.9: 0 Вопрос: Почему??? Проверялось на разных машинах с конфигурациями: Perl 5.8.8/FreeBSD 7.0; Perl 5.8.8/Linux gentoo (kernel 2.6.20-gentoo-r8); Perl 5.8.8/Linux gentoo (kernel 2.4.32-gentoo-r7); Perl 5.10.0/Linux Ubuntu 8.10 (kernel2.6.27-12-generic); |
|||
|
||||
| ginnie |
|
||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
XoRe, с десятичными дробями часто возникают проблемы при вычислениях из-за невозможности их точного представления в виде двоичных чисел ограниченной разрядности.
Меня кое-что удивило в Вашем примере: я думал, что оптимизатор заменит 10*10 на 100 (тогда указанное Вами поведение интерпретатора Perl было бы странным), но он этого не делает
сравните с
в случае сложения, вычисление суммы оптимизатор также не выполняет
Кто-нибудь знает, почему оптимизатор так работает? Это сообщение отредактировал(а) ginnie - 18.2.2009, 18:59 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
||||||||
|
|||||||||
| sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 14 Всего: 31 |
ginnie, ассоциативность левая..
сравни с
|
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
sir_nuf_nuf, спасибо за пояснение, что-то оптимизатор не радует своим "интеллектом"
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| XoRe |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 18.2.2009 Репутация: нет Всего: нет |
Сказываются пробелы в образовании.
Спасибо за информацию) http://rt.perl.org/rt3/Public/Bug/Display.html?id=63304 Проблему можно считать решенной ) Это сообщение отредактировал(а) XoRe - 19.2.2009, 13:05 |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |