Форум программистов, компьютерный форум CyberForum.ru

Вычисление площади методом Монте-Карло - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ нужна опция gcc, которая позволяет вызывать функцию точки входа в скомпилированной dll http://www.cyberforum.ru/cpp-beginners/thread693487.html
Кропаю dll: /*A.cpp*/ #include <stdio.h> #include <windows.h> #ifdef BUILD_DLL // the dll exports #define EXPORT __declspec(dllexport) #else
C++ Распараллелить скалярное произведение векторов Задание - распараллелить скалярное произведение векторов. вектора vec1 и vec2 заполняются не рандомом для однозначности результата. в общем все работает,но препод впихнул симуляцию задержки 1го потока (в нашем случае который выполняет 10ую итерацию), и все накрывается. не знаю как это исправить (место обозначено (!!!)). пробывал поставить барьеры - не работает. как решить проблему? нельзя... http://www.cyberforum.ru/cpp-beginners/thread692634.html
Обходы графа C++
Ребят, помогите с курсачом по Дискретной математике. Задача у меня такая: Имеется N городов, соединенных сетью дорог. Заданы длины участков дорог между парами городов. Спроектировать структуру телефонной сети с минимальной стоимостью затрат на ее строительство, если считать, что стоимость участка сети между двумя городами пропорциональна расстоянию между ними. Правильно ли я понимаю, если...
Вычислить Минимальный элемент массива, сумму элементов между первым и последним положительными элементами C++
В одномерном массиве, состоящем из N действительных элементов, вычислить: 1) Минимальный элемент массива. 2) Сумму элементов массива, расположенных между первым и последним положительными элементами. Превратить массив таким образом, чтобы сначала располагались все элементы, равные нулю, а затем - остальные. В одновимірному масиві, що складається з N дійсних елементів, обчислити: ...
C++ Преобразование и построение матриц http://www.cyberforum.ru/cpp-beginners/thread690329.html
кто может объяснить все строчки !? #include <stdio.h> #include <math.h> #include <conio.h> #include <stdlib.h> #include <time.h> int main() {
C++ Обработка строк указателем Обработка строк при помощи указателей. Здравствуйте Помогите, пожалуйста, решить задачу. Для ввода строк использовать один и тот же символьный массив tmp.Обработку строк производить при помощи указателей внутри выделенного блока памяти. Запрещается использовать дополнительные массивы или блоки. Создать текстовую функцию main(), которая реализует след. алгоритм: 1. Объявить и ввести... подробнее

Показать сообщение отдельно
Nick Alte
Эксперт С++
1594 / 986 / 117
Регистрация: 27.09.2009
Сообщений: 1,902
Завершенные тесты: 1
19.11.2012, 16:10     Вычисление площади методом Монте-Карло
Вот теперь программа похожа на правду.
Рекомендации:
- квадрат a проще и эффективнее записать как a*a;
- воспользоваться тем, что x1 = y2 и x2 = y1;
- сократить ненужные и повторяющиеся вычисления;
- использовать double вместо float;
- объявлять переменные там, где они используются впервые;
- написать RandFloat с использованием стандартного rand;
- написать InsideFigure.
Для простоты предположим положительное a
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int main() {
    double a = 0;
    cin >> a;   // В дальнейшем нам может понадобиться проверка введённого значения, но сейчас предположим, оно заведомо корректно.
    const double b0 = a/2, b1 = a*2; // Диапазон (одинаковый по осям x и y)
    const double S0 = (b1 - b0)*(b1 - b0);  // Площадь квадрата, в который вписана фигура
    const int N = 100000;  // Общее количество точек
    int n = 0;   // Количество точек внутри фигуры
    for(int i=0; i < N; ++i)
        if(InsideFigure(RandFloat(b0, b1), RandFloat(b0, b1)))  // Проверяем пару координат на принадлежность фигуре
            ++n;  // Увеличиваем счётчик
    cout << "Monte-Carlo area: " << (S0 * n) / N << endl;
    cout << "Exact area: " << (1.875 - 2*log(2))*a*a << endl;
}
По поводу случайных чисел: функция rand возвращает целые значения в диапазоне от 0 до достаточно большого числа, определённого константой RAND_MAX. Преобразовать такое число в вещественное в заданном диапазоне (основная цель RandFloat) несложно.

Проверка принадлежности InsideFigure - функция, возвращающая значение bool и проверяющая соблюдение описанных выше условий.
 
Текущее время: 08:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru