Форум: "Прочее";
Текущий архив: 2007.12.23;
Скачать: [xml.tar.bz2];
ВнизНе могу уследить логику работы калькулятора Windows Найти похожие ветки
← →
alikon1 (2007-11-15 17:37) [0]В университете дали задание до завтра сделать тригонометические функции Windows калькулятора, т.е перевод между градусами, радианами, градами ну и соответственно sin, cos, tg, arcsin, arccos, arctg, sinh, cosh, tgh. Обрадовался блин, думал сделаю по быстрому. Не тут то было. Начал проверять Windows калькулятор в работе.
Например:
1. Вычисляю гиперболический SIN в градах числа 90. Получаю 6,1020164715892040100135501756818e+38
2. Вычисляю гиперболический COS в градах числа 90. Получаю 6,1020164715892040100135501756818e+38
3. Появляются какие-то сомнения, решил перепроверить.
4. Вычисляю гиперболический SIN в градах числа 12,6. Получаю 148279,28264741545644846389929769
5. Вычисляю гиперболический COS в градах числа 12,6. Получаю 148279,2826507874716826030825092
Хоть чем-то отличаются :) Вероятно правильно считает.
6. Продолжаю дальше проверять с числом 90. Повторяю действие №2 и сразу же вычисляю обычный COS но уже в радианах. Получаю 0,51706858550891603054408030522943. Возможно тоже верно :)
7. Думаю: а что если не делать шаг №2, а сразу вставить в калькулятор уже полученные ранее 6,1020164715892040100135501756818e+38 и посчитать обычный COS в радианах (по идее то же самое, что и в шаге №6 должно получиться). А получаю 0,44797430819126946207838657359732. И как это называется? Что за расхождения в результатах.
8. Пробую то же самое с синусом сделать. Повторяю действие №1 и сразу же вычисляю обычный SIN но уже в радианах. Получаю 0,85594396889037590270964235513284.
9. Делаю то же самое, что и в шаге №7, но соответственно для SIN. И получаю вообще ОТРИЦАТЕЛЬНОЕ число -0,89404643011454026281280581084783. Мозг начинает разрушаться потихоньку. Ничего больше не соображаю.
Итог: что мне делать??? Ну и как я ТАКИЕ ЖЕ тригонометрические функции как и в Windows калькуляторе завтра в университете показывать буду? Какая логика у этого чертового калькулятора?
← →
Jeer © (2007-11-15 17:57) [1]А собственно, что ты хотел ?
sh = e^x + e^(-x)/2
Возведи 2.71 в 90-ю степень и обрадуешься
← →
БарЛог © (2007-11-15 18:29) [2]> Какая логика у этого чертового калькулятора?
Это калькулятор Гейтса :)
← →
alikon1 (2007-11-15 18:34) [3]Вообще-то хотелось бы, чтоб результаты в шагах №8 и №9 или №6 и №7 совпадали, хотя бы приблизительно.
> Возведи 2.71 в 90-ю степень и обрадуешься
получил 9,2733399048270831858664513257647e+38
по идее правильно
а в чем подвох? чему радоваться?
← →
alikon1 (2007-11-15 18:40) [4]значит такое в здравом уме не сделать?
да, получается не видать мне "автомата" на экзамене :(
← →
Рамиль © (2007-11-15 20:22) [5]Я так и не понял, при чем здесь калькулятор?
← →
Che Vingam (2007-11-15 22:38) [6]
> Какая логика у этого чертового калькулятора?
Железная. Какой вопрос, такой и ответ.
Я уверен, что с точки зрения калькулятора
StrToFloat(FloatToStr(x)) <> x, хотя и близко к нему (в буфер обмена копируется строка, так что ctrl-c, ctrl-v это StrToFloat(FloatToStr())).
Учите матчасть.
> ТАКИЕ ЖЕ тригонометрические функции как и в Windows калькуляторе
А слабо ТАКИЕ ЖЕ как в учебнике математики? Там хоть написано, откуда результат, не надо эксперименты ставить.
← →
alikon1 (2007-11-16 09:19) [7]
> Я уверен, что с точки зрения калькулятора
> StrToFloat(FloatToStr(x)) <> x, хотя и близко к нему
При одинаковых (почти :) ) исходных данных 2 разных результата:
0,85594396889037590270964235513284 и -0,89404643011454026281280581084783
> А слабо ТАКИЕ ЖЕ как в учебнике математики?
Теперь так и буду делать
← →
Котик Б (2007-11-16 11:15) [8]Как говорил нам преподавательпо теормеху:
"От точности полученного результата зависит точность Вашей оценки" !!!
← →
boa_kaa © (2007-11-16 11:23) [9]
> alikon1 (15.11.07 17:37)
Учебник по элементарной математике открой.
Программист, блин...
← →
alikon1 (2007-11-16 17:40) [10]
> Учебник по элементарной математике открой.
> Программист, блин...
Вообще-то вопрос был: почему 2 разных результата при одинаковых исходных данных.
Программист, блин... Читай внимательно, гений
← →
isasa © (2007-11-16 21:08) [11]alikon1 (16.11.07 17:40) [10]
Откуда он знает, что ты с этими числами делаешь. Может это противозаконно.
e+38 - похоже просто "машинное число", средняя температура на Марсе ...
← →
boa_kaa © (2007-11-16 21:42) [12]
> alikon1 (16.11.07 17:40) [10]
если такой вопрос возник, то дело еще хуже...
← →
alikon1 (2007-11-19 22:03) [13]так и объяснили бы доходчиво, "на пальцах", если кто знает наверняка. Сам бы знал, так и не спрашивал бы. А то: причем здесь калькулятор, читай математику, или, если возник такой вопрос - то ты дурак (даун, имбицил и т.д. и т.п.).
← →
Jeer © (2007-11-20 11:12) [14]Я вот "одного" не пойму:
1. Взять учебник арифметики и выяснить
sh(x) = (e^x - e^-x)/2 = 0.5*e^x - 0.5/e^x
ch(x) = (e^x + e^-x)/2 = 0.5*e^x + 0.5/e^x
Т.е. sh и ch отличаются вторым слагаемым, которое при больших x пренебрежимо мало, по ср. с первым слагаемым.
При x = 90 (и при чем тут грады, градусы и радианы ?)
sh(90) ~ ch(90) = 6.1020164715892E38
2. Любой программный калькулятор создается на основе арифметических операций (+,-,*,/) в конечной машинной или виртуальной сетках.
Если рассматривать Delphi и естественную машинную сетку для платформы i32, то длина мантиссы Extended равна 64 бит, а машинный нуль равен 2^64 или EPS = 0.5E-19. Это значит, что два числа программно и аппаратно неотличимы, если разница между ними меньше EPS.
Для случая sh и ch первый член имеет порядок E38, а второй член порядок E-40, т.е. суммарный порядок составляет 78, что намного превышает порядок различения E19.
Windows калькулятор имеет EPS = 1E-32, что впрочем тоже недостаточно для различения E78 :))
3. Есть еще одна особенность Win Calc - у него внутренний формат хранения рациональных чисел не плавающий, а дробный. Т.е. 1/3 хранится именно так, а не как 0.333..
Возможно, что при больших порядках и при использовании "буфера обмена" возникают небольшие проблемы:))
4. Функции Sin и Cos периодические и нет смысла выполнять вычисления при A > 2*pi
Теоретически, алгоритм вычисления sin или cos, заложенный в тот или иной калькулятор,
должен выполнять приведение в диапазон 2*pi (на самом деле даже pi/2 достаточно),
а потом уже использовать тот или иной метод вычисления функции.
5. Не путайте гиперболические функции с тригонометрическими и будет вам счастье.
Итого - в учебник.
← →
alikon1 (2007-11-20 18:49) [15]Спасибо. Теперь более-менее понятно.
← →
студиозус (2007-11-20 20:00) [16]>При x = 90 (и при чем тут грады, градусы и радианы ?)
при том, что sh(90) = гиперболический синус от 90 радиан.
прямой угол = 90 градусов = 1 радиан = 100 град.
← →
Чайник © (2007-11-21 00:23) [17]
> студиозус (20.11.07 20:00) [16]
>
> прямой угол = 90 градусов = 1 радиан = 100 град.
прямой угол = пи/2 радиан
← →
Jeer © (2007-11-21 10:24) [18]
> студиозус (20.11.07 20:00) [16]
Родной мой, для шинуса и кошинуса единицы измерения отсутствуют.
Точнее, геометрическое определение этих функций - площадь криволинейного треугольника.
Так при чем здесь градусы, грады и радианы ?
Впрочем, судя по Вашему комментарию - хоть "в попугаях".
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2007.12.23;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.047 c