PI тест на Arduino

gadagur
Offline
Зарегистрирован: 28.12.2021

Доброго времени суток.

На днях на Ютубе смотрел видосик, там чел тестит разное железо ПИ Тестом (Вычисление числа ПИ). Тест класика для кластеров, серверов и т.д. Заинтересовало, что человек там в видосе (обзор на Портента Н7) пытал платку тем самым ПИ тестом.... Так вот... Самостоятельно собрать скетч не вышло, от слова совсем... Гугл тоже не шибко помог с поиском решения или банально скетча. Вообщем нахожусь в поиске скетча (в идеале),ну или хотя бы каких мыслей по данной тематики...................  

rkit
Offline
Зарегистрирован: 23.11.2016

Солнце, зачем тебе это? Если даже в лоб не можешь посчитать ряд лейбница без помощи форума, то сделать оптимальный алгоритм для железа ты уж точно не  сможешь.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

gadagur пишет:
смотрел видосик ... собрать скетч не вышло

Надеюсь, что вот этот видосик поможет Вам понять ситуацию в которой Вы очутились.

gadagur
Offline
Зарегистрирован: 28.12.2021

Я смотрю Вы отзывчевые люди :(

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Отзывчевей некуда. 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

gadagur пишет:

Я смотрю Вы отзывчевые люди :(

Одно дело - в ТВОЁМ коде скобку или запятую пропущенную поставить, и совсем другое - написать код за тебя. 
Вэлкам ту раздел «Ищу исполнителя».

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

gadagur пишет:

Я смотрю Вы отзывчевые люди :(

А то!

Morroc
Offline
Зарегистрирован: 24.10.2016

gadagur пишет:

Я смотрю Вы отзывчевые люди :(

Нахрена это надо то хоть ? Задача не для ардуины вот вообще.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

а может Нилаканта?

Да, скетч, скажу по правде - не проверял )))

по Лейбницу:

// ¶ = 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510 58209 74944
// Для ESP8266 i=555555 ¶ = 3.14159 96551 5137  Рассчитано за 1670 миллисекунд
// Для AVR i=555555     ¶ = 3.14159 96551 5136 Рассчитано за 16181 миллисекунд
// Для AVR i=1000000    ¶ = 3.14159 39331 0546 Рассчитано за 29128 миллисекунд

uint32_t my_millis;

float pi()
{
  float p = 0;
  float z = 1;
  for (uint64_t i = 1; i < 5555555/*18446744073709551615*/; i += 2)
  {
    p += z * 4 / i;
    z *= -1;
  }
  return p;
}

void setup() {
  Serial.begin(115200);
}

void loop() {
  my_millis = millis();
  Serial.print(" ¶ = ");
  Serial.println(pi(),22);
  Serial.print(" Рассчитано за ");
  Serial.print(millis() - my_millis);
  Serial.println(" миллисекунд");
  delay(5000);
}

по Нилаканту: (не проверял)
 

// <a data-cke-saved-href="https://newtonov.ru/chemu-ravno-chislo-pi/" href="https://newtonov.ru/chemu-ravno-chislo-pi/" rel="nofollow">https://newtonov.ru/chemu-ravno-chislo-pi/</a>

uint32_t my_millis;

float pi()
{
  float p = 3.00000000000;
  float z = 1;
  uint32_t j=2;
  
  for (uint64_t i = 1; i < 10000/*18446744073709551615*/; i++)
  {
    p += z * 4 /(j*(j+1)*(j+2));
    z *= -1;
    j+=2;
  }
  return p;
}

void setup() {
  Serial.begin(115200);
}

void loop() {
  my_millis = millis();
  Serial.print(" ¶ = ");
  Serial.println(pi(),20);
  Serial.print(" Рассчитано за ");
  Serial.print(millis() - my_millis);
  Serial.println(" миллисекунд");
  delay(5000);
}

 

Logik
Offline
Зарегистрирован: 05.08.2014

float p не пойдет. мантиса коротковата. z быстро станет слишком мелким и вывалится за младший разряд. думай еще!

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Logik пишет:

float p не пойдет. мантиса коротковата. z быстро станет слишком мелким и вывалится за младший разряд. думай еще!

чтобы взять эту ноту...ну дальше ты знаешь
PS я жеж не настоящий сталевар, а так смотришь, к пятнице тема и созреет )))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А я вот не понимаю, заем вообще считать ПИ? Особенно верующим людям! Значение ПИ явно прописано в Библии (также как в еврейском Танахе и в мусульманских книгах). Поэтому любая попытка посчитать что-то не то, что написано там, попахивает ересью и вероотступничеством!

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

А я вот не понимаю, заем вообще считать ПИ? Особенно верующим людям! Значение ПИ явно прописано в Библии (также как в еврейском Танахе и в мусульманских книгах). Поэтому любая попытка посчитать что-то не то, что написано там, попахивает ересью и вероотступничеством!

зачем зачем, хоцца аднака

PS - тестит разное железо ПИ Тестом

nik182
Offline
Зарегистрирован: 04.05.2015

ua6em пишет:

Logik пишет:

float p не пойдет. мантиса коротковата. z быстро станет слишком мелким и вывалится за младший разряд. думай еще!

чтобы взять эту ноту...ну дальше ты знаешь
PS я жеж не настоящий сталевар, а так смотришь, к пятнице тема и созреет )))

Попробуй вместо float long double написать. Вдруг прокатит.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

nik182 пишет:

Попробуй вместо float long double написать. Вдруг прокатит.

не должно, но проверю
PS на самом деле значение ПИ не важно, завершится ли когда нибудь расчёт для максимально возможного числа итераций в этом скетче в 18446744073709551615 (uint64_t)

Logik
Offline
Зарегистрирован: 05.08.2014

как так - не важно. Оно же только в евклидовом пространстве применимо как связь длинны окружности и радиуса. В искривленном не евклидовом значение нарушится. Так что расчет применим для обнаружения искривления пространства! Продолжайте считать!

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

достаточно что ТСу мыслей подкинул )))
 

sadman41
Offline
Зарегистрирован: 19.10.2016

ЕвгенийП пишет:

А я вот не понимаю, заем вообще считать ПИ? Особенно верующим людям! Значение ПИ явно прописано в Библии (также как в еврейском Танахе и в мусульманских книгах). Поэтому любая попытка посчитать что-то не то, что написано там, попахивает ересью и вероотступничеством!


Верующие люди должны убедится, что контроллер кошерный. Если не посчитает он число Божее, как в Библии прописано - значит сие есть дьявольская машина и её положено жечь святым напряжением, пока не очистится и дух её не воспарит на более высший уровень абстракции, к первому разработчику всея.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

sadman41][quote=ЕвгенийП пишет:

 пока не очистится и дух её не воспарит на более высший уровень абстракции, к первому разработчику всея.

ОТОЖ! Всё в рамках "Теории баллистики продолговатого тела"

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

sadman41 пишет:
положено жечь святым напряжением

Еретик! Током же! :-) Приговор исполняется любой катушкой (реле подойдет) на GPIO контроллера)) 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Ну пи и пи, и хрен с ним. Давайте лучше число «е» считать. Для разнообразия)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

BOOM пишет:

Ну пи и пи, и хрен с ним. Давайте лучше число «е» считать. Для разнообразия)

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

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Ну и решай, только «е», мало знаков чтоль?))

rkit
Offline
Зарегистрирован: 23.11.2016

ua6em пишет:

BOOM пишет:

Ну пи и пи, и хрен с ним. Давайте лучше число «е» считать. Для разнообразия)

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

Нет, не должно. Не считается пи в конечной памяти.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

BOOM пишет:

Давайте лучше число «е» считать. Для разнообразия)

Тем более, что в Библии его значение не приведено, так что не рискуем попасть в лапы Святой Инквизиции.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Самый прикольный способ посчитать Пи - метод Монте-Карло :-)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

Самый прикольный способ посчитать Пи - метод Монте-Карло :-)

сдаётся мне, что с пи не всё так однозначно )))

nik182
Offline
Зарегистрирован: 04.05.2015

Н... да... long double для расчётов прокатило, а для вывода нет. Ну кто возьмётся long double вывести?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

BOOM пишет:

Одно дело - в ТВОЁМ коде скобку или запятую пропущенную поставить, и совсем другое - написать код за тебя. 

Вэлкам ту раздел «Ищу исполнителя».

Это вряд ли.

Как справедливо заметил rkit, для написания грамотного теста "железа" наличия математического справочника под рукой совершенно недостаточно. Так что ТС просто финансово не потянет. Поэтому соглашусь с Петровичем.

ua6em пишет:

а может Нилаканта?

Зачем так сложно?

Вы, наверное, статью по ссылке до конца не дочитали? Там приводится гораздо более простое решение: достаточно взять число Тау и поделить пополам!

rkit пишет:

Не считается пи в конечной памяти.

Считается. Но не до конца.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

andriano пишет:

Как справедливо заметил rkit, для написания грамотного теста "железа" наличия математического справочника под рукой совершенно недостаточно. Так что ТС просто финансово не потянет. Поэтому соглашусь с Петровичем.

нам же само расчётное значение пи в принципе не важно, нам нужно затраченное на этот расчет время

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ua6em пишет:

andriano пишет:

Как справедливо заметил rkit, для написания грамотного теста "железа" наличия математического справочника под рукой совершенно недостаточно. Так что ТС просто финансово не потянет. Поэтому соглашусь с Петровичем.

нам же само расчётное значение пи в принципе не важно, нам нужно затраченное на этот расчет время

Это как раз то, о чем писал rkit. Для составления грамотного теста недостаточно общетеоретической подготовки и здравого смысла. Например, Джек Донгарра, безусловно, грамотный специалист. Тем не менее, LINPACK, написанный им для оценки скорости вычислений с плавающей точкой, на практике может использоваться для оценки качества оптимизатора компилятора либо для оценки производительности подсистемы кэш-памяти, но только не по прямому предназначению.

Другими словами, нам недостаточно знать лишь значение (цифру) затраченного времени, нам нужно еще и понимать, с чем именно связаны эти затраты. Ну, например, мы решили найти способ измерять высоту здания. Причем, высоту мы решили измерять в секундах - времени, за которое предмет, брошенный с крыши, достигает земли. И отсюда собираемся сделать вывод, что если значение высоты (в секундах) вдвое больше, значит, и здание вдвое выше.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

я так понял, что тест уже есть и сделан он средствами целочисленной математики

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ua6em пишет:

я так понял, что тест уже есть и сделан он средствами целочисленной математики

Ну, если нет FPU (как, например, на Ардуине), то любые вычисления, в том числе и с плавающей точкой, выполняются "средствами целочисленной математики". Вопрос только в том, кто переводит вычисления в целочисленные - программист или компилятор.

Logik
Offline
Зарегистрирован: 05.08.2014

Это должен обязательно делать программист, но не я.