1
0
Fork 0

Feedback on ex0.* and ex1.*

This commit is contained in:
Eric Teunis de Boone 2020-05-06 11:43:09 +02:00
parent e363d023cd
commit 982866a7e6
6 changed files with 47 additions and 21 deletions

View File

@ -0,0 +1,12 @@
#!/usr/bin/env python3
import numpy as np
import sys
N = 1e6
if len(sys.argv) > 1:
N = float(sys.argv[1])
for _ in range(int(N)):
print( np.random.rand(1) )

View File

@ -1,4 +1,10 @@
Running `time ./gen_rand.py "1e9"` gives Running `time ./gen_rand.py "1e6"` gives
real 0m13.803s real 0m0.237s
user 0m8.874s user 0m0.160s
Contrast this to the following:
Running `time ./gen_rand_explicit.py "1e6"` gives
real 2m11.564s
user 2m1.950s

View File

@ -19,15 +19,15 @@ int main() {
unsigned int chars_capital = 0, chars_lower = 0, chars_digits = 0, chars_other = 0; unsigned int chars_capital = 0, chars_lower = 0, chars_digits = 0, chars_other = 0;
while ( *ptr != 0 ) while ( *ptr != 0 )
{ {
if ( *ptr >= int('A') && *ptr <= int('Z') ) if ( *ptr >= 'A' && *ptr <= 'Z' )
{ {
++chars_capital; ++chars_capital;
} }
else if ( *ptr >= int('a') && *ptr <= int('z') ) else if ( *ptr >= 'a' && *ptr <= 'z' )
{ {
++chars_lower; ++chars_lower;
} }
else if ( *ptr >= int('0') && *ptr <= int('9') ) else if ( *ptr >= '0' && *ptr <= '9' )
{ {
++chars_digits; ++chars_digits;
} }

View File

@ -39,7 +39,9 @@ char* join(const char* str1 , const char* str2)
char* joinb(const char* str1 , const char* str2) char* joinb(const char* str1 , const char* str2)
{ {
int size = strlen(str1) + strlen(str2) + 1; // size should be 2 more than required for the strlens to
// incorporate the space and the null byte
int size = strlen(str1) + strlen(str2) + 2;
char* new_str = new char[size]; char* new_str = new char[size];
*new_str = 0; *new_str = 0;

View File

@ -15,12 +15,25 @@
#define MEMORY_SIZE_IN_CHARS G #define MEMORY_SIZE_IN_CHARS G
void make_throwaway_ptrs(int leak_size ) {
for ( int i = 0; i < leak_size ; i++)
{
char* throwaway_ptr = new char;
}
// oops, we are not returning the pointers
// this means it goes out of scope when the function ends
}
int main() { int main() {
char* throwaway_ptr = new char[MEMORY_SIZE_IN_CHARS]; make_throwaway_ptrs(MEMORY_SIZE_IN_CHARS);
std::cout << "We leaked " << MEMORY_SIZE_IN_CHARS * sizeof " " << " bits" << std::endl; std::cout << "We leaked " << MEMORY_SIZE_IN_CHARS * sizeof " " << " bits" << std::endl;
std::cout << "Ready to kill the process? (press Enter)" << std::endl;
std::cin.ignore();
return 0; return 0;
} }

View File

@ -23,10 +23,10 @@
#include <iostream> #include <iostream>
#include <cmath> #include <cmath>
#define VERBOSE false #define VERBOSE true
char b32_lookup_table[] = "ABCDEFGHIJKLMNOPQRSTUV"; char b32_lookup_table[] = "0123456789ABCDEFGHIJKLMNOPQRSTUV";
int base = 8; int base = 32;
int main() { int main() {
//a //a
@ -75,7 +75,7 @@ int main() {
digits[digit_num] = number & lsb_bitmask; digits[digit_num] = number & lsb_bitmask;
// Shift off the bits we have put in to the array // Shift off the bits we have put in to the array
number = ( number >> bits_in_char ); number >>= bits_in_char;
++digit_num; ++digit_num;
} }
@ -91,14 +91,7 @@ int main() {
// Loop the other way so the first digit we get out is MSB // Loop the other way so the first digit we get out is MSB
while ( digit_num >= 0 ) while ( digit_num >= 0 )
{ {
if ( digits[digit_num] < 10 ) std::cout << b32_lookup_table[digits[digit_num]];
{
std::cout << digits[digit_num];
}
else
{
std::cout << b32_lookup_table[digits[digit_num] - 10];
}
digit_num--; digit_num--;
} }