Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 17.02.2011, 02:16
BuKT вне форума Посмотреть профиль Отправить личное сообщение для BuKT Найти все сообщения от BuKT
  № 1  
Ответить с цитированием
BuKT
 
Аватар для BuKT

блогер
Регистрация: Dec 2010
Сообщений: 237
Записей в блоге: 5
По умолчанию Операции с Number

Решил через Теорему Вильсона кое-чего доказать. И столкнулся с неприятной багой.

Код AS3:
var factArr:Array = new Array();
 
factArr[0] = 0;
factArr[1] = 1;
factArr[2] = 2;
factArr[3] = 6;
 
function getFact(i:Number):Number {
	if (factArr[i]) {
		return factArr[i];
	}
	factArr[i] = i*getFact(i-1);
	return factArr[i];
}
//Если коротко - getFact возвращает факториал. Правильно возвращает. По возможности - запоминает расчёты.
 
var p = 23; //Явно простое число;
//Теорема Вильсона
trace (Boolean((getFact(p-1) + 1)%p == 0)); //false!
Ок, думаю, что-то не то. Проверил в калькуляторе - всё получается. Решил оттрейсить без всяких переменных.

Код AS3:
//Большое число - факториал 22 по версии виндового калькулятора
trace ((1124000727777607680001)/23); //48869596859895990000
//Но
trace ((1124000727777607680001)%23); //22!!!
Кто-нибудь знает, как с этим бороться?
Или, если нет, есть ли другой относительно быстрый и/или легко реализуемый на АСкрипте алгоритм проверки числа на простоту?

Старый 17.02.2011, 02:36
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 2  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
ну а что вы хотите от числа двойной точности?

Старый 17.02.2011, 03:21
BuKT вне форума Посмотреть профиль Отправить личное сообщение для BuKT Найти все сообщения от BuKT
  № 3  
Ответить с цитированием
BuKT
 
Аватар для BuKT

блогер
Регистрация: Dec 2010
Сообщений: 237
Записей в блоге: 5
Альтернативы =)

Получается, когда я указываю 22-х рязрядное число, он создаёт под него участок памяти с плавающей точкой?

Старый 17.02.2011, 03:25
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 4  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
если хотите точности - пишите или ищите библиотеки для работы с длинной арифметикой.
А тут - 64х битное число с плавающей запятой. Вы на нем никогда точно не вычислите большой факториал. Нужны целочисленные типы.

Старый 17.02.2011, 03:45
BuKT вне форума Посмотреть профиль Отправить личное сообщение для BuKT Найти все сообщения от BuKT
  № 5  
Ответить с цитированием
BuKT
 
Аватар для BuKT

блогер
Регистрация: Dec 2010
Сообщений: 237
Записей в блоге: 5
Честно говоря, никогда не работал с большими числами, потому и спрашиваю про альтернативу.

В принципе, уже набросал в мозгу примерное решение проблемы со своей реализацией больших чисел через композицию базовых численных классов. Но класс же не может иметь одним из полей экземпляр самого себя?

Старый 17.02.2011, 03:46
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 6  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
Но класс же не может иметь одним из полей экземпляр самого себя?
Ничто не запрещает

Старый 17.02.2011, 06:02
BuKT вне форума Посмотреть профиль Отправить личное сообщение для BuKT Найти все сообщения от BuKT
  № 7  
Ответить с цитированием
BuKT
 
Аватар для BuKT

блогер
Регистрация: Dec 2010
Сообщений: 237
Записей в блоге: 5
Неужели прямо без ограничений? Или что-нибудь вроде "не инициализировать в конструкторе" есть?

Создать новую тему Ответ Часовой пояс GMT +4, время: 19:31.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 19:31.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.