|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
16.01.2024, 08:45 | #1 |
Регистрация: 04.08.2010
Сообщений: 5
|
Floating point overflow в 64-bit ОС
Добрый день!
Пишу на Delphi 11 64-bit для Android 64-bit. Код:
“Floating point overflow.” Устраняющая ошибку директива: Код:
Мне нужно, чтобы это выполнялось без SetExceptionMask (как в 32-битной ОС). Перерыл русско- и англоязычный интернет, но не нашёл решение. Как пофиксить? Последний раз редактировалось mlml; 16.01.2024 в 10:40. |
16.01.2024, 15:58 | #2 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,886
|
А чем-то не устроит указать сразу константу, которую взять хоть из калькулятора ? Зачем это вычислять каждый раз и городить обход исключений.. Если, конечно, это не весь код и там десятки подобных вычислений, тогда можно подумать ещё
|
16.01.2024, 16:08 | #3 |
Участник клуба
Регистрация: 03.06.2009
Сообщений: 1,834
|
а функцию power() в исходниках найти и поглядеть, чего там возникает за исключение такое?
я так понимаю, это 2 в степени -1022?? т.е. 1/ (2^1022)? если да, ну, там точно ноль получается с большой точностью... есть вариант, самому написать функцию возведения в степень и там уже заложить ограничения, чтоб меньше какой-то степени чтоб выдавало чёткий 0 без ошибок.
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
Последний раз редактировалось NetSpace; 16.01.2024 в 16:12. |
18.01.2024, 03:16 | #4 | |
Регистрация: 04.08.2010
Сообщений: 5
|
Цитата:
В 32-битной ОС: power(2,-1022) выдаёт 2,2250738585072Е-308 power(2,1022) выдаёт 4,49423283715579Е307 и это меня устраивает, но не то, что выдаёт 64-битная. Мне нужна большая точность при вычислении: power(2,i), где i может принимать значения от -1023 до +1023 (Extended80: 19 digits of precision in a range from 3.37E-4932 to 1.18E4932) И ещё почему-то не открывается docwiki.embarcadero.com Забанили россиян или проблемы с сайтом? Но это уже другая тема... Последний раз редактировалось mlml; 18.01.2024 в 06:01. |
|
18.01.2024, 07:07 | #5 |
Участник клуба
Регистрация: 03.06.2009
Сообщений: 1,834
|
если возникает такая непреодолимая ошибка, то нет желания часть таких расчётов программно сделать в EXCEL, а уже ответы брать оттуда? заодно создание, чтение и запись в экселевский файл повторите...
или EXCEL у вас тоже такой пример выдаёт с ошибкой?
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
Последний раз редактировалось NetSpace; 18.01.2024 в 10:46. |
18.01.2024, 08:55 | #6 |
Регистрация: 04.08.2010
Сообщений: 5
|
EXCEL, да, выдаёт результат правильно. Это в Delphi 11 64-bit при работе с типом данных Extended80 почему-то не предусмотрена такая точность.
Последний раз редактировалось mlml; 18.01.2024 в 09:01. |
18.01.2024, 15:07 | #7 |
Регистрация: 04.08.2010
Сообщений: 5
|
Нашёл, что, если понизить степень, то есть power(2,1022) заменить на:
power(2,100)*power(2,100)*...*power (2,22), то результат адекватный. Вопрос, однако, к разработчикам. |
20.01.2024, 06:11 | #8 |
Регистрация: 04.08.2010
Сообщений: 5
|
Был не прав. Нужно было сделать так:
Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Delphi 7 Floating Point overflow | furgingerbread | Помощь студентам | 1 | 21.11.2016 20:06 |
Метод Камера c++. Матрица 1000х1000. Floating point overflow | cripple_nipple | Помощь студентам | 7 | 08.04.2015 17:13 |
floating point overflow в delphi | gylayko | Помощь студентам | 2 | 14.09.2012 17:34 |
floating point overflow | awzq | Общие вопросы C/C++ | 2 | 05.09.2012 13:54 |
Floating point overflow | Ania Lunee | Помощь студентам | 4 | 18.05.2012 22:01 |