| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Машинная арифметика |
| Автор: PRF 16.4.2008, 00:22 |
| Здрасти. Помогите пожалуйста найти в Делфи машинную бесконечность (т.е максимальное представимое число в типе single, double, extende), как найти это числа алгоритмически?? |
| Автор: Fedia 16.4.2008, 04:33 | ||
| Из справки const MaxDouble: Extended = 1.7e+308; const MaxSingle: Extended = 3.4e+38; const MaxExtended: Extended = 1.1e+4932;
Добавлять к переменной определенного типа значение в цикле, до тех пор пока не получишь ошибку, результат последней, успешно прошедшей операции сложения будет приближенно равным максимальному значение типа переменной. |
| Автор: EvilsInterrupt 16.4.2008, 11:13 |
| Poseidon, А че тебе алгоритм- то не нравится ? )))) Результат есть же! ;)))) |
| Автор: Frees 16.4.2008, 12:00 |
для этих типов код не заработает |
| Автор: Alexeis 16.4.2008, 12:15 |
| можно взять единицу и удвоить, затем полученное опять удвоить, и так до тех пор пока не возникнет исключение. |
| Автор: PRF 16.4.2008, 15:53 |
| я так и делал(увеличивал единицу), вот только Делфи не поддерживает переполнение типа (как например в с++) и тот код который работает на с++, не работате на Делфи. Пишет, что переполнение вещественного типа (floating pointer overflow) - вроде так. |
| Автор: Mayk 17.4.2008, 07:59 | ||||||
Это который? Операции типа 1.0/0.0? Вот http://www.delphibasics.co.uk/RTL.asp?Name=Infinity говорят что 1.0 / 0.0 работает. Если не получится, то действтовать можно в лоб - посмотреть что записано в inf'е в с++, например так
и переписать эти байты в single'овую переменную в дельфи(как - не скажу). А вот тут
грят что в дельфи есть PositiveInfinity. |
| Автор: DeadMage 17.4.2008, 17:48 |
| Для целочисленных можно расчитать, умножить sizeof(integer), sizeof(cardinal), ... на то ли 16^2 то ли еще что-то, ну вы меня поняли... PS:а может так:16^sizeof(xxx)? |
| Автор: ivan219 17.4.2008, 20:36 |
Скорее так: 2^8 * SizeOf(xxxx) (/ 2 если со знаком) |
| Автор: Esperito 18.4.2008, 19:53 | ||
Найти - в модуле Math.pas:
Алгоритмически - как описано в Math.pas, т.е. 1.0 / 0.0. Бесконечность по стандарту числа с плавающей точкой - это особый вид числа и, имхо, математическими операциями с числом с плавающей точкой его никак не получишь. |