Как изменить этот код, чтобы сделать последовательный программа для расчета времени настенных часов (time_t), необходимых для вычисления точечного продукта комплексных чисел.расчет настенных часов
#include "stdafx.h"
#include <stdlib.h>
#include<stdio.h>
typedef struct complex{
double real;
double img;
}complex;
complex add(complex a, complex b);
complex multiply(complex *a, complex *b);
int _tmain(int argc, _TCHAR* argv[])
{
int choice, temp1, temp2;
complex a, b, c;
while (1)
{
printf("Press 1 to add two complex numbers.\n");
printf("Press 2 to multiply two complex numbers.\n");
printf("Press 3 to exit.\n");
printf("Enter your choice\n");
scanf_s("%d", &choice);
if (choice == 3)
exit(0);
if (choice >= 1 && choice <= 2)
{
printf("Enter a and b where a + ib is the first complex number.");
printf("\na = ");
scanf_s("%d", &a.real);
printf("b = ");
scanf_s("%d", &a.img);
printf("Enter c and d where c + id is the second complex number.");
printf("\nc = ");
scanf_s("%d", &b.real);
printf("d = ");
scanf_s("%d", &b.img);
}
if (choice == 1)
{
c.real = a.real + b.real;
c.img = a.img + b.img;
if (c.img >= 0)
printf("Sum of two complex numbers = %d + %di", c.real, c.img);
else
printf("Sum of two complex numbers = %d %di", c.real, c.img);
}
else if (choice == 2)
{
c.real = a.real*b.real - a.img*b.img;
c.img = a.img*b.real + a.real*b.img;
if (c.img >= 0)
printf("Multiplication of two complex numbers = %d + %di", c.real, c.img);
else
printf("Multiplication of two complex numbers = %d %di", c.real, c.img);
}
else
printf("Invalid choice.");
printf("\nPress any key to enter choice again...\n");
}
}
Бенчмаркинг сложный. Сложная арифметика не так сложна, что вы сможете измерить, сколько времени потребуется с помощью 'time_t', которая в большинстве систем имеет степень детализации в одну секунду. Вам придется повторить расчет несколько миллионов раз, чтобы заставить его заняться достаточно долго, чтобы быть измеримым, и вам, вероятно, придется использовать более эффективную меру, чем 'time()' и 'time_t'. Как минимум, используйте 'clock()'. Скорее используйте 'gettimeofday()', который сообщает на микросекундах, или 'clock_gettime()', который сообщает наносекундам. На какой платформе вы работаете? Ответ для Windows отличается. –
Обратите внимание, что если оптимизатор видит, что вы не используете результаты расчета, он может оптимизировать вычисление вне кода, поэтому вы увидите, что все работает очень быстро. Преодоление оптимизатора без полного его блокирования - это одна из тех вещей, которые делают бенчмаркинг жестким. –
@JonathanLeffler Вы не должны использовать 'gettimeofday' (http://blog.eitanadler.com/2012/11/dont-use-gettimeofday2-or-time3-for.html) либо (должна быть другая ссылка с более полезные альтернативы, но я не могу найти его прямо сейчас). – Kninnug