ерунда в екселе
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Сообщество > Разное > ерунда в екселе

ерунда в екселе

Закрытая тема
Поиск в этой теме
 
Автор темы   Непрочитано 23.03.2007, 11:26 ерунда в екселе
#1
Sven


 
Регистрация: 17.07.2006
Москва
Сообщений: 221


Создал простейший расчет в екселе - перевод градусов из десятичных долей в минуты и секунды. Все считает, кроме градусов с десятой долью 8 (например 10.8). Проблема состоит в том, что до угла 31,8 градуса - все ок, при угле 32,8 и больше расчет ведется неверно - выдает 60 секунд, вместо того, чтобы увеличить количество минут на единицу. Никак не могу разобраться в чем дело.
Файл прилагается. Заранее спасибо.
[ATTACH]1174638409.rar[/ATTACH]
Sven вне форума  
 
Непрочитано 23.03.2007, 11:51 Re: ерунда в екселе
#2
Mercury

Инженер-конструктор
 
Регистрация: 09.04.2006
г. Запорожье Украина
Сообщений: 368
<phrase 1=


Цитата:
Сообщение от Sven
Создал простейший расчет в екселе - перевод градусов из десятичных долей в минуты и секунды. Все считает, кроме градусов с десятой долью 8 (например 10.8). Проблема состоит в том, что до угла 31,8 градуса - все ок, при угле 32,8 и больше расчет ведется неверно - выдает 60 секунд, вместо того, чтобы увеличить количество минут на единицу. Никак не могу разобраться в чем дело.
Файл прилагается. Заранее спасибо.
[ATTACH]1174638409.rar[/ATTACH]
Это из за погрешности которая увеличивается от числа, уточни формат ячеек и округляй результаты правильно..или макрос напиши.
Других причин не вижу.
Mercury вне форума  
 
Автор темы   Непрочитано 23.03.2007, 11:59
#3
Sven


 
Регистрация: 17.07.2006
Москва
Сообщений: 221


вот и я не вижу. :cry: формат ячеек стоит "числовой". округление - средствами екселя. макрос написать - можно, конечно, но почему ексель сам не считает? ведь это просто умножение и деление.
Sven вне форума  
 
Непрочитано 23.03.2007, 12:00
#4
Jeka

конструктор
 
Регистрация: 17.03.2005
Украина, Донецк
Сообщений: 786


Функция "целое" округляет в меньшую сторону. Разрядность при вычислении дает например 0,9*60=53,9999999... Поэтому и округляет до 53. Смотри что будет если поставить 22 знака после запятой.
[ATTACH]1174640448.rar[/ATTACH]
Jeka вне форума  
 
Автор темы   Непрочитано 23.03.2007, 12:10
#5
Sven


 
Регистрация: 17.07.2006
Москва
Сообщений: 221


то есть получается, что внутренний расчет ведется с гораздо большей точностью, чем потом отображается в ячейках :shock: Вернее, даже не точностью, а погрешностью. И какой может быть из этого выход?
Sven вне форума  
 
Непрочитано 23.03.2007, 12:18
#6
Mercury

Инженер-конструктор
 
Регистрация: 09.04.2006
г. Запорожье Украина
Сообщений: 368
<phrase 1=


Цитата:
Сообщение от Sven
то есть получается, что внутренний расчет ведется с гораздо большей точностью, чем потом отображается в ячейках :shock: Вернее, даже не точностью, а погрешностью. И какой может быть из этого выход?
Щас я выложу. Почти готово.
Mercury вне форума  
 
Автор темы   Непрочитано 24.03.2007, 00:21
#7
Sven


 
Регистрация: 17.07.2006
Москва
Сообщений: 221


"Уж полночь близится, а Германа все нет..."
Видать не судьба ...
Sven вне форума  
 
Непрочитано 26.03.2007, 09:23
#8
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


Ну полночь не полночь, а выкрутиться можно.
[ATTACH]1174886588.rar[/ATTACH]
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.03.2007, 09:35
#9
Sven


 
Регистрация: 17.07.2006
Москва
Сообщений: 221


Спасибо!
Алексей - а пробовал в своем расчете задавать углы с сотыми и тысячными долями. Посмотри, там че-то не то получается. Вообще, стоит наверное, письмо Б. Гейтсу написать офис - лицензия
Sven вне форума  
 
Непрочитано 26.03.2007, 09:50
#10
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


Не будет беспокоить Билли по пустякам
[ATTACH]1174888226.rar[/ATTACH]
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.03.2007, 09:54
#11
Sven


 
Регистрация: 17.07.2006
Москва
Сообщений: 221


ага - а теперь опять вернемся к углу 32,8 :?
Sven вне форума  
 
Непрочитано 26.03.2007, 10:13
#12
Mercury

Инженер-конструктор
 
Регистрация: 09.04.2006
г. Запорожье Украина
Сообщений: 368
<phrase 1=


Цитата:
Сообщение от Sven
ага - а теперь опять вернемся к углу 32,8 :?
Дело втом что тут замкнутый круг, всегда выскакивает угол который некорректно считается, я несколько часов мучался, таких формул понакручивал ужас, но всеравно появляется угол который зараза не так считается. Тут надо программировать на VBA/
Mercury вне форума  
 
Автор темы   Непрочитано 26.03.2007, 10:26
#13
Sven


 
Регистрация: 17.07.2006
Москва
Сообщений: 221


ну да, та же самая фигня - замкнутый круг. Извините, что загрузил на несколько часов. Просто интересная проблема возникла - на пустом месте
Sven вне форума  
 
Автор темы   Непрочитано 26.03.2007, 11:45
#14
Sven


 
Регистрация: 17.07.2006
Москва
Сообщений: 221


те-же самые формулы в Mapple 11 считают корректно. Видимо - глюк екселя
Sven вне форума  
 
Автор темы   Непрочитано 27.03.2007, 09:36
#15
Sven


 
Регистрация: 17.07.2006
Москва
Сообщений: 221


Проблема решилась.
Цитата:
"Корень проблемы — в ограниченной точности машинного представления величин. Исключение составляют, например, целые числа. Следует понимать, что ВСЕ числа, вводимые в клетки электронной таблицы, во внутреннем представлении EXCEL хранятся в формате Double (число двойной точности - 8 байт). То, что при отображении результатов, используется округление, является лишь вопросом удобства (интерфейса с человеком). "
Вот пример демонстрирующий данную проблему.
[ATTACH]1174973754.rar[/ATTACH]
Sven вне форума  
 
Непрочитано 27.03.2007, 11:07
#16
Mercury

Инженер-конструктор
 
Регистрация: 09.04.2006
г. Запорожье Украина
Сообщений: 368
<phrase 1=


Mercury вне форума  
 
Непрочитано 27.03.2007, 11:38
#17
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


Ну а если попробовать на VBA?
Код:
[Выделить все]
Function AngDegrees(Ang As Double) As Long
  AngDegrees = Fix(Ang)
End Function

Function AngMinutes(Ang As Double) As Long
  AngMinutes = Round((Ang - AngDegrees(Ang)) * 60)
End Function

Function AngSeconds(Ang As Double) As Double
  AngSeconds = Round((((Ang - AngDegrees(Ang)) * 60 - AngMinutes(Ang)) * 60), 4)
End Function

Function AngResult(Ang) As String
  AngResult = CStr(AngDegrees(Ang)) & " " & CStr(AngMinutes(Ang)) & "'" & _
    CStr(AngSeconds(Ang)) & "''"
End Function
P.S. Что самое прикольное, так это то, что "проблемный" файл в OO Calc'e нормально работает без подобных глюков.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 27.03.2007, 12:14
#18
Sven


 
Регистрация: 17.07.2006
Москва
Сообщений: 221


Спасибо, Алексей. Вопрос решился функциями Excel. Файл прилагаю. Решение простое - округлять промежуточные результаты вычислений.
Или переходить на MathCAD, Maple и тп.
[ATTACH]1174983256.rar[/ATTACH]
Sven вне форума  
Закрытая тема
Вернуться   Форум DWG.RU > Сообщество > Разное > ерунда в екселе