Thursday, September 12, 2019

proth research - directories and more directories

After several years of working with Proth numbers, looking for interesting properties, a filesystem will get pretty packed!








How do I organise directories in a mass of say 500 or 1000 directories? Starting off with fixed so prothleadNNNNNN (Example: prothlead8388607)

If/when I find something interesting, and think its worth generalising, then I just replace the NNNNNN number with a short sequence of characters.
They have no meaning generally, just a way of making things stand out in a mass of directories.

What you can see from the final image 'prSAL' is how I labelled the prothlead8388607 directories after I generalised away from just the t=23 case. It helped to quickly think up something short - just a way of less typing at the time.

I could still be writing prothlead8388607 today but it just felt like too much and so i found a shorter thing that just occurred to me at the time. ( pretty arbitrary )

I could keep posting screenshots until I had 10 images on screen here to show the problem in hunting around in Proth numbers over a period of 7 years and keeping things organised in directories!


Sunday, June 23, 2019

pari operation time - Miller Rabin

Setting 1 in the call to ispseudoprime() in Pari/GP will get you a strong pseudoprime test (Miller-Rabin)

Pseudoprime tests are more practical first attempts when dealing with huge inputs ( In this example the number has 632202 decimal digits )

How long did the operation take? ## shows 13 hours 58 minutes




Link and further reading:


Thursday, June 13, 2019

ABC and ABCDN formats for input to LLR and PFGW - numeric construction

With the creation of organised projects for prime number searching, and the retirement of some of the leading C program creators, the knowledge about ABC and ABCDN format is harder to find.

Here I gather a few links (see references) and show a source code sample that will help point you in the right direction.



LLR is great for standard formats (commonly mined prime areas) and is able to cope with many different formats, however where you differ from some of the more common +1 and -1 forms, the following warning is given in the program readme:
- K*b^n+c numbers with |c| < > 1 or k > b^n can only be PRP tested.

If the number is found PRP, the % of factorization is then shown,
     but note that it is relevant only if c == +1 or -1...


References and links:
  • LLR implements "Lucas-Lehmer-Riesel" and Proth algorithms - source
  • OpenPFGW - source
  • OpenPFGW page about ABC and ABC2 and ABCD - text
  • Caldwell pages at University of Tennesse at Martin - program links

Saturday, September 2, 2017

High performance [mathematical] computing

When talking about supercomputers, there is a temptation to define things in terms of either of the following:
  1. massive simulations 
  2. they mean maths
Here is a phrase used in a recent discussion about high performance computing (hpc) that points to the first definition for my mind ...
The term number-crunching refers to large-scale numerical simulations
Now simulations of spacecraft flight or the effects of adding a dam to a major river really are typical uses of hpc

However, thinking about (2 ... they mean maths), you have many uses of hpc where the Mathematics itself is the outcome.

For people who are learners of hpc, I can see why the 'massive simulations' message is preferred as a way of presenting the utility of hpc

However as a Mathematician I naturally think also of many scenarios where the Mathematics is the outcome.

Not all of those outcomes will be moved onto a powerful workstation in the next decade.

There is also another major use of hpc which is not really [in my opinion] a good fit for the word simulation. Natural language processing at very high speed is one of the prerequisites of AI.

In such a context you are not simulating the process of adding meaning to raw words, you are actually doing it when you task a hpc with such processing.

Tuesday, February 14, 2017

shifting from m1q 898739...000591

Here is a fun loop for you to code up in Pari/GP and examine the output

m1q=89873960570712084732829528260849073549900665278240478747684257744366000579315782083148000591

for(k=9000,10000,n=m1q+2+3*k;n6=n%6;prim=0;if(0==n6,prim=isprime(n/6));print("k=",k," gives ",prim,"=isprime(n/6)");if(prim>0,break))

Sample output for loop starting k=9000

k=9000 gives 0=isprime(n/6)
k=9001 gives 0=isprime(n/6)
 ...
k=9250 gives 0=isprime(n/6)
k=9251 gives 1=isprime(n/6)

Here is a slightly improved loop:

for(k=9000,10000,n=m1q+2+3*k;n6=n%6;prim=0;if(0==n6,print("k=",k," 0==n/6");prim=isprime(n/6));print(" gives ",prim,"=isprime(n/6)");if(prim>0,break))

k=9249
 0==n/6
 gives 0=isprime(n/6)
 gives 0=isprime(n/6)
k=9251 0==n/6
 gives 1=isprime(n/6)


m1q is prime and has the following construction:

t=193;m1=((-1+(3^(t))*37));m1q=m1/50

Monday, February 8, 2016

primes and quadratic involving deduction of 2

Take a prime p and double it then deduct 5 to obtain 2p5

candidate = -2+p*2p5

Is candidate prime?

Example p=53 so 2p5 =101

5351=-2+53*101
5351 is prime

Next try p=47 so 2p5 = 89

4181=-2+47*89
4181=37*113


Next try p=59 so 2p5 = 113

6665=-2+59*113
6665=5*31*43

Next try p=61 so 2p5 = 117

7135=-2+61*117
7135=5*1427


Next try 67 so 2p5 = 129

8641 is prime

Now algebraically we might say -2+p*(2p-5) which is rewritten 2p^2-5p-2

Next try 71 so 2p5 = 137

9725=-2+71*137
9725=5*5*389


Next try 73 so 2p5 = 141

10291=-2+73*141
10291=41*251

Next try 79 so 2p5 = 153

12085=-2+79*153
12085=5*2417

Next try 83 so 2p5 = 161

13361=-2+83*161
13361=31*431

Next try 89 so 2p5 = 173

15395=-2+89*173
15395=5*3079


Next try 97 so 2p5 = 189

18331=-2+97*189
18331=23*797

Next try 101 so 2p5 = 197

=-2+101*197
=5*23*173


Next try 103 so 2p5 = 201

20701=-2+103*201
20701=127*163 is composite


Next try 107 so 2p5 = 209

22361=-2+107*209
22361=59*379 is composite


Next try 109 so 2p5 = 213

23215=-2+109*213
23215=5*4643 is 5 divisible



Next try 113 so 2p5 = 221

24971=-2+113*221
24971 is prime


Answer will be divisible by 5 when -2+2p^2 is divisible by 5
( or written another way answer cannot be divisible by 5 when -2+2p^2 is not divisible by 5 )


Now we redo the above example but with slightly different assignment for p

Set the prime 113 then deduct a 100 and use that figure as p

13 is prime
p=13

113=p+10^2

221 = p*(p+4)

-2+(p+(2*5)^2)*p*(p+4)


prime 24971==-2+113*221            ( 221 is 13*17 )


p=17

 -2+(p+(2*5)^2)*p*(p+4)

41767=-2+117*17*21
41767=11*3797


p=19

-2+(p+(2*5)^2)*p*(p+4)
51201=-2+(7*17)*(19*23)
51201=149*349


p=1053 so p+100 is 1053
p2=1053

prime 1283313211==-2+1153*(1053*1057)

( 1283313213==(3^4)*7*13*151*1153 )


Now let us vary things slightly by defining p2=p+100 and having our answer derived as -2+(p2^2)*(p2+4)

p=953 which is prime and then p+100 is 1053
p2=1053

prime 1172011111==-2+1053*(1053*1057)

( 1172011113==(3^8)*7*(13^2)*151 )







Tuesday, September 10, 2013

sagemath terminal colours - green > blue

Sagemath includes an embedded version of ipython and any changes you make to terminal colours need to happen in ipython_config.py in the correct place.

After doing a sage install there is a directory on my computer at location:
~/.sage/ipython-0.12/

The goal of this short set of hints is to assist you in creating a suitable profile_sage/ipython_config.py file.

That file should look like this:

# Configuration file for ipython.

c = get_config()

# Set the color scheme (NoColor, Linux, or LightBG).                                                                    
c.TerminalInteractiveShell.colors = 'Linux'

What that will achieve is to make your prompt green instead of blue.
The default (blue) seems a little bright on the eyes, so by setting colors = 'Linux' you get the less garish green prompt instead.

You can just run ahead and use geany or another editor to create ipython_config.py with content detailed above.

If you prefer to look at what iPython itself generates then you might wish to know of these two commands:
  • ipython profile list
  • ipython profile create justcreatedbyme
However be aware that you want to be running the embedded ipython version when doing 'profile create' in order to be sure a a fully compatible profile is created.
( Manual copy / rename things to get file to proper location of
profile_sage/ipython_config.py )

An example of the output from profile list is shown below:

List of profiles available to iPython

Thursday, June 27, 2013

Power of negative number - pari gp

Do use parentheses () to wrap your negative where necessary.






Because exponentiation has priority over +/- you should wrap your -1 in parentheses (), or, if just squaring, use the sqr() function.

The priority of operators in Pari/GP is detailed in Section 2.4 of the User Guide and titled "2.4 GP Operators"

Sunday, January 20, 2013

number of digits function - sage - sagemath

If you work with Sage a lot, then these two points will help you remember how to get a digit count:
  • Sage uses Objects to represent mathematical constructs
  • Sage is written in Python
   two_to_ten=2^10
   a_to_power=11^two_to_ten
   len(str(a_to_power))

Answer: 1067

There are 1067 digits in the number formed when 11 is raised to 1024

Pari/GP and number of digits:


In Pari/GP the length() function can be used in a similar way to len() in Sage. In Pari try length(Str(11^1024))


You can still access Pari/GP directly through sage.

Try this in Sagemath:


   gp("length(Str(11^1024))")

The very large - two examples using Pari:


( click on the image above for optimal font sizing )

Notes and further reading:

You can check the 11^1024 digit count yourself by following this wolfram alpha link:
    http://www.wolframalpha.com/input/?i=11%5E1024

Python note: Although sage allow you to use ^ to indicate raising to power, when writing in Python directly you should use the correct ** operator.
Pari/GP is designed particular for number theory, and does not have a real need to store mathematical constructs as api friendly Objects [by default] in the same way as Sage does.

Tuesday, May 1, 2012

ipython - Better Feedback for Beginners

Having worked with Python through Sage Mathematics, and directly through Emacs, I never really took the time to understand what IPython offers.


For beginners or Intermediates who want to try something to see if it adds to their productivity, IPython is worth a look.


who and whos:

%who lists names of all objects, but %whos shows the list with type and contents summary.

Depending on your system IPython setup, you may be able to omit the % at the front and just type who and similar 



'run' and variable inspection:

The run command executes your python [script] and brings the variable into the interactive namespace.

There are many more features of IPython like tab completion, history, and logging.

Do take a look and see if it can add anything to your productivity in Python.

There is an interactive test site here if you want to get started now:

Sunday, November 20, 2011

Ex student? How much for £300 per week take home?

How much Salary does a graduate have to earn to take home £300 a week?

Answer: Around £27,000 per annum


Rough estimate - including Student Loans Company (slc):

Assuming a nice round 60% net (tax + NI is approx 40%), we see...

£300 x 52 gives £15,600

Divide by .6 to gross up that figure gives you the higher gross of £26,000

£15,600 / 0.6 = £26,000

£90 * 12 = £1,080 (annual slc repayment on £26,000)

Estimate: £27,080


But 40% for tax & NI is wrong? But £90 per month slc is wrong?

These figures are a bit rough and ready. Feel free to substitute your own percentages.

A spreadsheet to help with the monthly repayment to slc can be found here

Note: Spreadsheet is in Open Document format (.ods).
Download LibreOffice to edit or view locally

You can view it directly in Googledocs here


Below is a preview image:



The Tax and National Insurance rate estimates are local to the United Kingdom, please adjust as appropriate for your local situation.

UK Zero Percent Tax threshold in 2014:

From April 2014 the personal tax threshold (level below which no income tax is payable) is estimated at £10,000

What this means for somebody earning £27,000 is that 17,000 of their salary is taxed at entry level tax rate of 20%.
Making Annual income tax liability of £3,400 (Monthly £283.33)

The earlier statement "tax + NI is approx 40%" overstates things a little. Being an employee on that sort of salary means paying 12% National Insurance (NI).

Update the spreadsheet to reflect the current picture and get a more accurate estimate.

The £90 monthly payment to your Student Loan is still payable, and is not affected by changes in Tax or NI rates.

Saturday, November 5, 2011

Science - who should have a voice? is silence Scientific?

I am not anti-vax, I am not pro-vax, and I am no more comfortable with the ex actor becomes science voice, than I am with ex actor becomes president.

One thing that I would say, is that whilst I am no fan of Mr Celebritee, or Ms Ex Baywatch, it would also not be entirely wise, to smack down completely, all voices from outside the Scientific establishment.

It maybe in 15 or 20 years that Science (the community) has more of your faith, or less of your faith, but whatever, it might not be the same level as today.

If I could turn down the volume level on the non-science stuff/people then that would be great, but be careful of pursuing a policy of Science (establishment) or strict silence.

Here is an illustration:

Science - Non-science celeb
.       -  A
a       -  A
A       -  A
A       -  a
A       -  .

The final option above is the 'Scientific establishment only' viewpoint - where you might advocate nothing else having a voice.
This option is not what I would choose.
Neither would I choose the first or second lines above.

I have been on the receiving end of some difficult reading in the past.
Reading journalists using pseudo-science to build a following around a view, that serves corporate lobbyists, but also their own profile, is painful.

I do not have a total solution.

The Internet has created a great way of building a community around celebrity messages.
Sometimes those celebrities are not in it for the good of that community, and may even be part-funded by a company that stands to make a good profit, from debunking the current Scientific view in a particular area [ allegedly ]

One solution is to give all citizens at least some introductory experience in critique, and researching of funding/sponsorship.
In the UK we have school leavers well versed in Facebook likes and shares, but who have no idea how to critique or spot a 'sponsored' report.

The very fact that political lobbying is so successful in the West, is testament to how lacking, in even basic critique, some countries citizens really are.


Celebrity bloggers do science - Is this the return of Quackery?

Possibly.

However listening (entirely) to the Science establishment reaction to this, might see too strong a response.

I watched a TV programme in 2011 where the President of the Royal Society, Sir Paul Nurse talked about the state of Science, and the rise of the celebrity blogger.

I agreed with much of what was said in that programme, however [ going back to the critique :) ], there is a billion pound Science industry in the UK, and most of what was said is, what you might expect of somebody seen as a figurehead for the Science establishment.

One thing that I seem to recall was the message that Science is on trial because of recent events / debates.

In order to have a trial, you need a jury, even though that jury may include types who you personally cannot stand :)

The Science establishment cannot be it's own jury*. Perhaps our job might be to ensure that, where practical, we enhance (and share) our personal critique skills, and be aware of how to spot the quackery.

jury* here does not mean peer review. Peer review is very important and I respect that, however if an 'alternative view' is growing stronger because of celebrity bloggers, then perhaps it is unwise to ignore how the 'lay person' feels about Science. Just how are you going to address this Scientists?

To avoid any confusion: I am an advocate of peer review, and appreciate how important this is - recent example - the reexamination of the 'faster than speed of light' speculation of European Physicists in 2011 - stimulated by CERN / observations between Switzerland and Italy.

I am not a Physicist, and have no clue about relativity.
However as a lay person (in the area of Physics), it is helping my faith in that area of Science, when I see such a 'peer review' process in action.

However the Scientific establishment is not infallible (see link below)
Science is not the only voice I want to listen to.
My (personal) choice is to listen closely when Scientists speak, but also, not to assign zero weight to other voices.

Whilst I appreciate the importance of established Scientific Journals, I also appreciate the need for arxiv


Notes and Further Reading:

Extract from Heaviside (from link below):
Heaviside was not interested in rigour...
Whist rigour and proof are very important, there are very occasionally folks, who despite resisting rigour and process, manage to discover and apply something magnificent.
( Just to be crystal clear here I am thinking about Heaviside, and not any celebrity bloggers that I have read to date )

Heaviside did eventually get the recognition that he deserved, however the people who he did not 'get on with' entirely, managed to delay that recognition by several years.

The Scientific Establishment is a people system, and just like any people system (or computer system), is likely chock full of imperfections.

However my personal view, it that the Scientific Establishment (currently) does a pretty good job, so I will keep listening.

There have been at least two major Science debates in the last decade, where public opinion has really entered into the debate. In neither case, have I personally seen anything, that had me thinking, on those particular issues, that Science was wrong.
However I do not rule out in the future, the possibility, that I might find myself disagreeing with Science on a particular issue either.

For me it is an issue by issue thing. On individual topics, I try to critique where I can.

Want to help make Science more open? Read the manifesto and consider endorsing.

Note: I have no personal affiliation to Nick Barnes or that manifesto, read and critique what is said for yourself.

Saturday, October 8, 2011

Pure Mathematics and the horror of numbers

He was a pure mathematician who used to work entirely with abstract symbols, but had now sunk so low that his latest report contained actual numbers, indeed numbers with decimal points; that (he pretended) was the ultimate disgrace!

The above extract is from the excellent "The Man Who Loved Only Numbers"

I laughed quite hard when I read this :)

Saturday, October 1, 2011

logarithm of large number - it is not about computation!

Computer programmers who have not studied Mathematics beyond elementary level, often trip over this one.

Perhaps you asked yourself one of these questions:
Why does Gnu Gmp library not have a logarithm function?

What is the natural log of a large number such as 6775471000000000?


Rules of logs - product and powers:

For calculating logarithms of gigantic numbers - the standard ANSI C library is probably all that you need.

That computational tool, needs to be supplemented, with two pieces of Mathematical knowledge as illustrated here:




Images courtesy of Wikipedia (Creative Commons Licensed)

The number I mentioned above 6775471000000000 is too large for entry into a school standard calculator. Ten digits or so is the most you can enter.

Rewrite the number as 6775471 times 'a thousand million' and go that way.

Using the product of logs rule (graphic above) and doing the two calculations we see that:

log(6775471) = 15.728819  to 6 decimal places

...and...

log(1,000,000,000) = 20.723266 to 6 decimal places

Add the two answers together gives 36.452085 to 6 decimal places

Alternatively for the second piece of the addition you could have used 9log(10) by utilising the second rule - power of logs.


But my number is huge and does not contain a long stream of zeros?

This is all about precision. Do you really need more than say 6 or 8 decimal places?

Avoid creating artificial conditions. Unless you are working with numerical methods and/or in Engineering, then you will probably answer NO to what I just asked.

So your number is 6775471 followed by another 75 digits (some zero some not)

If you only need 6 digits of precision in your answer, then it matters not what those 75 digits contain, simply pretend they are zero, and either adapt my method shown or...

...use the 2nd log rule from the image above.
( hint: You might want to use 75log(10) as part of your workings. )

Answer Guess: Around 187.nnnnnn sounds about right.


Prime number searching should not be limited to just Mathematicians

Agreed.

However looking up some rules of logarithms by reading this page or looking on Wikipedia is not hard.

So quit moaning that 'such and such a library' does not have a function for logarithms of huge integers, and take five minutes to do a little addition and subtraction.

Often Ansi C coders first go searching for log() of huge integer functions, when they are writing prime number search programs, which is why I mention it.


Notes and Further Reading:

Laws of Logarithms is part of the "Core 2 (C2)" Curriculum for post compulsory education in the UK (A level) .

If you studied Engineering at University, then you will have encountered Laws of Logarithms twice - once as part of 'A Level' Mathematics, and once as part of your Engineering course.

All the Logarithms in this article are 'Natural Log'. Your calculator might show that as 'ln' depending on the brand.

The Laws of Logarithms apply similarly to base 10 logs - but you would obtain different decimal answers, than those tabulated above.

The Index page for that C2 book shows pages 43 and 44 cover 'multiplication law' & 'power law' for Logarithms.

Friday, September 23, 2011

log theory reminder - pari / gp useful

When working with a scientific calculator that has log to base e and log to base 10 only, employ 'Change of Base' theory.

Change of Base - Wikipedia


Source: http://www.wikipedia.org/wiki/Logarithm#Change_of_base


Change of Base - questions rewritten:

If you know even a little about logs then you should be able to answer the following question:

What is log to base 10 of 1000?
The blindingly obvious answer is three.

Here are two additional ways of phrasing things to get an answer:
  • To what power do we raise 10 so as to obtain 1000
  • How many zeros in 1000

Assuming your calculator only does natural log (log to base e) use Change of base:

log to base 10 of 1000 is (log to base e (1000))/(log to base e (10)) = 3


Pari / GP - an example using x=1+1365*2^15

Pari / GP is a number theory program. It is designed for working Mathematicians / Number theorists, and is most useful to folks comfortable with Mathematical theory.

It is not designed, primarily, as a 'user friendly calculator replacement' for lay folks.

Now using x as given above - what is log to base 2 of x?

     Answer:






If you want that Answer as a continued fraction then Wolfram Alpha can do that.

Wednesday, September 21, 2011

Introduce a little Geometry into your life - morning

What is not to like about Geometry ... it surrounds us, so why not embrace it?

Patios & Pools to Steps & Walkways and beyond.

Have fun and introduce a bit of Geometry into your day!

Wednesday, August 31, 2011

Counter examples as Mnemonics - Remainders

When refreshing my memory about a Mathematical subject - I find counter examples can be a useful way of getting active. Here is an example about mod() / Congruences.

Working mod 4 with two numbers a=5 and b=7

...and writing in computing function form we say...

mod(a,4) = 1

  and

mod(b,4) = 3

Now apply a scaling (k) to both numbers ... say ... scaling by 11

mod(ka,4) = 3                       (ka is 55)

  and

mod(kb,4) = 1                       (kb is 77)


And what we observe is that the results seem to have exchanged places :)

This counter example is a good reminder that applying the same scaling to two different numbers does not always preserve the mod result.

There is much theory to access regarding congruences / modulo, and counter examples like this, can be a good way of stimulating a refresher of that theory.

Sunday, August 21, 2011

The death of week numbers - and browser help

Used to be a time when workers in offices had week numbers marked at the bottom of the page, of a desktop paper diary.

Managers and others with budget responsibilities found these particularly useful

Now folks are using smartphone calendars, Google calendars, or Lightning to help with their planning.


Marathon preparation - 12 weeks or so right?

Question: When do I need to start my running preparation if my Marathon is 1st December?

The simple answer is 48-12 = week commencing 5th September .... but some images make it clearer.


...and for folks who live in a web browser rather than at the command line ...




Wednesday, August 17, 2011

gmp mpz gotchas - part 1

The GNU mp (gmp) library is a fast and stable library for working with large integers.

As with all software, when you begin using it, you find out things that you should and shouldn't do.


NULL arguments to functions - check for each function:

mpz_get_str() is a function which seems to handle a NULL first argument just fine.

Example function call:

outM = mpz_get_str(NULL,10,M);

(outM above is a char pointer and gets the decimal representation of mpz M)

In the documentation, the function signature for mpz_get_str() is given as:

char * mpz_get_str (char *str, int base, mpz_t op )

Second example - be careful what you assume!

if (mpz_mod_ui(NULL,C,6) == 0) { /* do something */ }

The above throws a runtime error - not surprising when you consult the documentation for the function signature.

unsigned long int mpz_mod_ui (mpz_t r, mpz_t n, unsigned long int d ) 

mpz_mod_ui() is quite clear that the first argument should be an mpz type, so don't disappoint it :)

When working with gmp, you are effectively working in two type spaces - C and native gmp types. Functions such as mpz_mod_ui() are really flexible, in that they give you the mod() result in two different type spaces.

Libraries are not mind readers, and cannot know in which type space your next line of code will be working. By giving you the result as both an unsigned long int and the mpz_t labeled here as r, the function is doing it's damnedest to help you out!

The downside is that you may well see little point in retaining the result in the other type space.

My runtime error was caused by me attempting to throw away the mpz_t result as it felt redundant.

Here is my new preferred way - use an mpz_t you set up particularly for transient results.

if (mpz_mod_ui(MOD_NULL,C,6) == 0) {
 /* flag as six multiple */
}

Just create your own mpz_t MOD_NULL and use it where you are not interested in keeping the result. You will need to run mpz_init(MOD_NULL) before executing the if statement illustrated.



Transient variables - bad coding practices to avoid:

In the past, I have been tempted to reuse spare variables - example:
    if (mpz_mod_ui(BSQR,C,6) == 0) {

It is bad coding practice to use a seemingly proper variable, as a holder for transient data / as a dump.

Using dump variables generally is not without issue, however naming the thing correctly is at least a step in the right direction :)


The important thing to remember is that whatever you call your transient variable, that it is not used to hold values that really are used in your logic.

Avoid the temptation to reuse a label wherever possible - it rarely leads to good things.


NULL as the first argument to mpz_get_str - probably going wrong here:

Earlier I used mpz_get_str() as an example of a function that worked with NULL as a first argument.

outBSQRM4AC = mpz_get_str(NULL,10,BSQRM4AC);

Knowing the function signature, and looking at the above line of code, you should be thinking char pointer for outBSQRM4AC.

Assigning the result of mpz_get_str() using an equals symbol is okay, and you are asking the gmp library to do your allocation for you.

If however, you known the maximum size of the MPZ / character array that you require, then you may prefer to predefine your character array, and tell mpz_get_str() to use it. In that case the the first argument of mpz_get_str() will not be NULL.

If you have predefined your character array (including size, then you might instead be using a call of this form:

mpz_get_str(outBSQRM4AC,10,BSQRM4AC);


Notes and Further Reading:

The publisher SAMS have a book "Teach yourself C in 24 hours"

In the Chapter "Hour 17 - Allocating Memory" there is a discussion about malloc() and free() and how to use them in conjunction with character pointers.







A more indepth volume is titled "Teach yourself C in 21 days", but it really depends on how far you want to take your C skills, as to which is the better option.













Neither of these books are particularly 'new', however that is one of the plus points of C, it has a stable api and a body of literature that never goes out of date.

Neither of these books will teach you C++, however I have not and probably never will have, any interest in learning C++

If you do, then the 'in 24 hours', probably does not come near to describing, the time that you will have to devote to becoming skilled in C++.

Better C++ literature is available, if you decide ANSI C is not where you wish to spend your time.

Saturday, August 13, 2011

Cython - notes and gotchas - part 1

Experimenting with Cython, as bringing together many variants of the same .c file, has me yearning to find a better Python / C balance.

Working through tutorials and experiments, I will note anything tricky, or any easy to fall into traps.


TypeError: 'NoneType' object is not callable:

Because Python is flexible, and does not insist on you declaring variables ahead of time, you may be tempted to do the same in Cython.


Better to declare the variable 'primes' explicitly, or to avoid name clashes.


So in the second example the result of the function call ends up in 'primes_list_strings' and we work on it from there.

To clarify the original error: Calling the variable that holds the result 'primes', and making a function call to primes() in the same line, might lead to confusion.


Notes and Further Reading:

If you want completion features when working with Python, then one solution is to invoke iPython and use that.

There are several full IDEs for Python including Idle and Eric, but if you just need a little completion (and syntax highlighting), then iPython is okay also.


Screenshot of Eric from screenshots.debian.net: