Войти
AntonioModer's blogФорум

LuaJIT меня убил (комментарии) (2 стр)

Страницы: 1 2 3 Следующая »
#15
5:50, 23 мая 2016

gammaker
> Откуда вообще это слово взялось?

TarasB нарёк.


#16
10:22, 23 мая 2016

Delfigamer
> А в качестве домашнего задания ты должен рассказать, почему если
> math.sin(math.pi) возвращает ноль - это ошибка.
Потому что очень маленькое число получается
string.format('%.15f', math.sin(math.pi))  -- > 0.000000000...

Вообще в тригонометрии: синус Пи = 0.
Это не ошибка.
Ошибка если не равен нулю.

#17
6:53, 24 мая 2016

AntonioModer
math.pi - это не точное число пи, а его приближение до энной цифры. В результате должна вылезти разница.
Впрочем, так происходит не всегда. Есть процессоры, которые хранят меньше цифр числа пи, чем следует, и в этом районе теряют дохрена знаков точности. А на графических ядрах - вообще ряды Тейлора и беспредел. То есть, математические функции у тебя считаются не до последней значащей цифры (так работает только арифметика), а примерно как-нибудь около приблизительно. Что делает питуха ещё более плавающим.

#18
12:32, 24 мая 2016

Delfigamer
> math.pi - это не точное число пи, а его приближение до энной цифры. В
> результате должна вылезти разница.
Ты читал пост выше, или монолог ведешь?

#19
16:21, 24 мая 2016

arprog
> #include <stdio.h>
> #include <time.h>
> #include <math.h>
>
> int main()
> {
> int i, j;
> long t1, t2, t3;
> double r;
>
> t1 = clock();
>
> for (i = 0; i < 10; ++i)
> {
> for (j = 0; j < 10000000; ++j)
> {
> r = cos(1);
> }
> }
>
> t1 = clock() - t1;
> printf("test1 = %f\n", (float)t1 / CLOCKS_PER_SEC);
>
> t2 = clock();
>
> for (i = 0; i < 10000000; ++i)
> {
> for (j = 0; j < 10; ++j)
> {
> r = cos(1);
> }
> }
>
> t2 = clock() - t2;
> printf("test2 = %f\n", (float)t2 / CLOCKS_PER_SEC);
>
> return 0;
> }
> Аналогично
Crunatus
> Или можешь просто запомнить как факт, что инициализация каждого нового цикла,
> критичнее итерации, [b]в любом языке программирования[/b].
Crunatus
> for состоит из фазы инициализации, последовательного вызова итерирующей
> функции, и собственно тела.
вы там упоролись что ли? https://ideone.com/ryTKDQ

test1 = 1825948.000000 microseconds
test2 = 1824508.000000 microseconds, debug: 1080604611.755329

с чего вообще в плюсах должна быть хоть какая-то разница, если парадигма "платишь только за то, что используешь" — фактически основной принцип языка?
#20
11:53, 25 мая 2016

добавил по 0 в больших циклах, на смарте -c4droid (g++) =>
test1 = 9.271472
test2 = 10.184864
СЕКУНДА!
.. а если сделать unsigned long long i,j;
=>
test1 = 13.105941
test2 = 12.184399
- дольше и наоборот секунда

#21
3:33, 26 мая 2016

AntonioModer
> Ты читал пост выше, или монолог ведешь?
Читал и говорю, в чём ошибся ты.
AntonioModer
> Вообще в тригонометрии: синус Пи = 0.
Всё верно, однако,
Delfigamer
> math.pi - это не точное число пи, а его приближение до энной цифры.
Подобно тому, как 2.001 - на самом деле не 2.001, а 0x1.0020c49ba5e35p1; math.pi - это не число π, а 0x1.921fb54442d18p1. Если из настоящего числа π вычесть это приближение, получится ненулевая разница, обозначим её α.
Попробуем теперь найти значение синуса.
sin(math.pi) = sin(π - α) = sin(α)
α - очень малый угол, но он не равен нулю. Значит, и его синус будет малой, но ненулевой величиной, а именно - 0x1.469898cc51701b839a2... · 2-51. В конце стоит многоточие, потому что, как и π, это число иррациональное - на этом знаки не заканчиваются, однако, опять же, компьютер может записать только конечное число цифр, поэтому ответ округляется. В идеальном случае, math.sin(math.pi) должно вернуть 0x1.469898cc51702p-51. Если он возвращает что-то другое - это ошибка. В том числе ноль - это грубая ошибка.

#22
5:05, 26 мая 2016

> вы там упоролись что ли?
Suslik, плюсы - это плюсы, а остальные ЯП, особенно скриптовые - они отдельно.

#23
16:19, 26 мая 2016

Delfigamer
> > Вообще в тригонометрии: синус Пи = 0.
> Всё верно, однако,
Delfigamer
> В идеальном случае, math.sin(math.pi) должно вернуть 0x1.469898cc51702p-51.
> Если он возвращает что-то другое - это ошибка. В том числе ноль - это грубая ошибка.
Нету "однако", синус Пи = 0 и точка.
Доказательство:
- координаты в окружности R=1: ПИ(x=-1, y=0), cos - это x, sin - это y => sin(y=0) = 0
- координаты ПИ - это целые числа, не иррациональные
(значение углов: https://ru.wikipedia.org/wiki/%D0%A2%D1%80%D0%B8%D0%B3%D0%BE%D0%B… B.D0.BE.D0.B2)

#24
19:47, 26 мая 2016

Кому принципиально надо точную в особых углах тригонометрию - можно завести какой-нибудь тип Angle, хранящий угол как рациональный коэффициент (отношение двух сверхдлинных интов) перед PI. Тригонометрию реализовать методами, внутри методов вызывать подходящие функции с учетом квадрантов и только в диапазоне -PI/8 : PI/8. Ну и конструкторы угла реализовать для градусов, радиан и коэффициентов PI.

#25
10:46, 27 мая 2016

Меня убила темная тема на скриншоте. Чуть глаза не сломал пока развидел.
Вспомнил сайты из 90х, когда любили писать синим по черному

#26
14:19, 27 мая 2016

entryway
> Меня убила темная тема на скриншоте. Чуть глаза не сломал пока развидел.
> Вспомнил сайты из 90х, когда любили писать синим по черному
Это ночная тема, не для тусклых мониторов типа TN, минимум IPS.
От белого фона у меня глаза напрягаются сильно, даже на минимальной яркости моника.
Потом на черном лучше виден разноцветный текст, чем на белом.

Синий по черному - это жесть конечно.
У меня не синим, а голубым по черному, он легче виден.

Dmitry_Milk
> Кому принципиально надо точную в особых углах тригонометрию - можно завести ...
На чистом Луа такой тип не сделаешь.

#27
11:13, 28 мая 2016

Dmitry_Milk
> Кому принципиально надо точную в особых углах тригонометрию - можно завести
> какой-нибудь тип Angle, хранящий угол как рациональный коэффициент (отношение
> двух сверхдлинных интов) перед PI.
Зачем сверхдлинных? Можно представить угол в виде 2-15 N π и затем хранить N в 16-битном целом. Тогда и у прямого угла будет точное представление, и модульная арифметика будет работать на пользу.

AntonioModer
> Нету "однако", синус Пи = 0 и точка.
Ты опять пропускаешь мимо ушей самое главное - math.pi ≠ π.

#28
14:04, 28 мая 2016

Delfigamer
> Ты опять пропускаешь мимо ушей самое главное - math.pi ≠ π.
Вообще не существует точного представления ПИ.

#29
16:35, 28 мая 2016

AntonioModer
> На чистом Луа такой тип не сделаешь, имхо.
fixed

Чтобы ты дальше не спотыкался, подскажу координаты еще парочки камней:
1) используй math.floor/math.ceil для дробей, если тебе нужно в дальнейшем работать как с целым числом, в противном случае lua округлит за тебя, не отбросит дробную часть как в си а именно округлит.
2) для подобных циклов for i=1,f(x) do print(i) end здесь f(x) будет вычислено один раз при старте цикла, ты не можешь изменять переменную i внутри цикла, переменная i является локальной, используя ее в попытке получить значение после цикла ни к чему хорошему не приведет.

Страницы: 1 2 3 Следующая »
AntonioModer's blogФорум

Тема в архиве.