Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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.045 c
3-1187167819
bss
2007-08-15 12:50
2007.12.23
Сортировка по llokup-полям


2-1196248697
botaniQ
2007-11-28 14:18
2007.12.23
NBSP - Как удалить?


2-1196336326
F@T@L_Err0r
2007-11-29 14:38
2007.12.23
TChar


15-1195834916
@!!ex
2007-11-23 19:21
2007.12.23
НПЦ Спектр


1-1191421712
ggg
2007-10-03 18:28
2007.12.23
Недостаточно памяти для обработки команды.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский