How to use @autojit high precision floating point
I've been busy with my Mendelbrot generator program, which is currently running with autojit (gpu parallelism) to improve performance. The point is that it only works when the floating point is accurate enough.
Is there a way (or a library) to increase the floating point precision and still be able to use autojit's performance enhancement feature?
I've tried bigfloat (couldn't get it to work) and mpmath (ignores autojit, very slow).
My program:
import numpy
import threading
import math
import time
import os
import subprocess
import winsound
from numba import autojit
from PIL import Image
from mpmath import *
def drawSet(iterations,startX,startY):
print("")
print("Calculating Values, please wait".center(80))
global SIZEW, ZOOM, SIZEH
def drawList(lista,iterations):
global data,SIZEW,SIZEH,COLORS
subprocess.call('cls',shell=True)
print("")
print("Drawing fractal, please wait".center(80))
for y in range(0,SIZEH):
for x in range(0,SIZEW):
if lista[x][y]==iterations:
data[y,x] = [0,0,0]
else:
data[y,x] = COLORS[lista[x][y]%(len(COLORS))]
#----------------------------------------------
@autojit
def DoIters(x,y,iterations):
c=complex(x,y)
c1=complex(x,y)
for i in range(iterations):
c=c**2+c1
if c.real**2+c.imag**2>=4:
return i
return iterations
#-----------------------------------------------
def constrNumbers(startX,startY,step,step2,iterations): #WORKS
global SIZEW,SIZEH,PROGRESS, EPOCH, numbers
PROGRESS+=1
y1=startY
for y in range(SIZEH): #sumnjivo
x1=startX
for x in range(SIZEW):
numbers[x][y]=DoIters(x1,y1,iterations)
x1+=step2
y1+=step
drawList(numbers,iterations)
img = Image.fromarray(data, 'RGB')
img.save("mendelbrot_screens/"+str(EPOCH)+"/"+str(PROGRESS)+".gif")
#----------------------------------------------
step=(1/ZOOM)*(4/SIZEW)
step2=step*(SIZEH/SIZEW)
#----------------------------------------------
numbers=[[-1 for y in range(SIZEH)] for x in range(SIZEW)]
constrNumbers(startX,startY,step,step2,iterations)
def updateSet(): #always works tested
global ZOOM, ITERATIONS, FOCUSX, FOCUSY,SIZEW,SIZEH
ITERATIONS=round(math.sqrt(abs(2*math.sqrt(abs(1-math.sqrt(5*ZOOM)))))*66.5)
subprocess.call('cls',shell=True)
moder=2/ZOOM
startX=(FOCUSX-moder)*(SIZEW/SIZEH)
startY=FOCUSY-moder
drawSet(ITERATIONS, startX, startY)
#########################################################################################################
####GLOBALS
#---------------------------
#http://www.bretttolbert.com/projects/colorscale/
#Output: RGB values Integer [0-255] CSS syntax (array)
COLORS2=['rgb(230,46,68)', 'rgb(230,46,90)', 'rgb(230,46,112)', 'rgb(230,46,134)', 'rgb(230,46,156)', 'rgb(230,46,178)', 'rgb(230,46,200)', 'rgb(230,46,223)', 'rgb(215,46,230)', 'rgb(193,46,230)', 'rgb(171,46,230)', 'rgb(149,46,230)', 'rgb(127,46,230)', 'rgb(105,46,230)', 'rgb(83,46,230)', 'rgb(61,46,230)', 'rgb(46,53,230)', 'rgb(46,76,230)', 'rgb(46,98,230)', 'rgb(46,120,231)', 'rgb(46,142,231)', 'rgb(46,164,231)', 'rgb(46,186,231)', 'rgb(46,209,231)', 'rgb(46,231,231)', 'rgb(46,231,209)', 'rgb(46,231,187)', 'rgb(46,231,164)', 'rgb(46,231,142)', 'rgb(46,231,120)', 'rgb(46,231,98)', 'rgb(46,231,76)', 'rgb(46,231,54)', 'rgb(61,231,46)', 'rgb(83,231,46)', 'rgb(105,231,46)', 'rgb(128,231,46)', 'rgb(150,231,46)', 'rgb(172,231,46)', 'rgb(194,232,46)', 'rgb(217,232,46)', 'rgb(232,224,46)', 'rgb(232,202,46)', 'rgb(232,180,46)', 'rgb(232,158,46)', 'rgb(232,135,46)', 'rgb(232,113,46)', 'rgb(232,91,46)', 'rgb(232,69,46)', 'rgb(232,46,46)']
COLORS3=['rgb(121,175,218)', 'rgb(120,177,218)', 'rgb(118,179,217)', 'rgb(117,182,216)', 'rgb(115,184,215)', 'rgb(114,187,214)', 'rgb(112,189,214)', 'rgb(110,192,213)', 'rgb(109,194,212)', 'rgb(107,197,211)', 'rgb(106,200,210)', 'rgb(105,203,210)', 'rgb(103,205,209)', 'rgb(102,208,207)', 'rgb(100,207,203)', 'rgb(99,206,198)', 'rgb(97,205,194)', 'rgb(96,205,189)', 'rgb(94,204,184)', 'rgb(93,203,180)', 'rgb(92,202,175)', 'rgb(90,201,170)', 'rgb(89,201,165)', 'rgb(87,200,160)', 'rgb(86,199,155)', 'rgb(85,198,150)', 'rgb(83,197,145)', 'rgb(82,196,140)', 'rgb(81,196,135)', 'rgb(79,195,130)', 'rgb(78,194,125)', 'rgb(77,193,120)', 'rgb(75,192,114)', 'rgb(74,192,109)', 'rgb(73,191,104)', 'rgb(71,190,99)', 'rgb(70,189,93)', 'rgb(69,188,88)', 'rgb(68,187,83)', 'rgb(66,187,77)', 'rgb(65,186,72)', 'rgb(64,185,66)', 'rgb(65,184,63)', 'rgb(68,183,62)', 'rgb(71,183,60)', 'rgb(74,182,59)', 'rgb(77,181,58)', 'rgb(80,180,57)', 'rgb(83,179,56)', 'rgb(86,179,54)', 'rgb(90,178,53)', 'rgb(93,177,52)', 'rgb(96,176,51)', 'rgb(100,175,50)', 'rgb(103,174,49)', 'rgb(107,174,48)', 'rgb(110,173,47)', 'rgb(113,172,45)', 'rgb(117,171,44)', 'rgb(120,170,43)', 'rgb(124,170,42)', 'rgb(127,169,41)', 'rgb(131,168,40)', 'rgb(135,167,39)', 'rgb(138,166,38)', 'rgb(142,165,37)', 'rgb(145,165,36)', 'rgb(149,164,35)', 'rgb(153,163,34)', 'rgb(156,162,33)', 'rgb(160,161,32)', 'rgb(161,157,31)', 'rgb(160,152,30)', 'rgb(159,147,29)', 'rgb(158,141,28)', 'rgb(157,136,27)', 'rgb(156,131,26)', 'rgb(156,125,25)', 'rgb(155,120,24)', 'rgb(154,114,23)', 'rgb(153,109,23)', 'rgb(152,104,22)', 'rgb(152,98,21)', 'rgb(151,93,20)', 'rgb(150,87,19)', 'rgb(149,82,18)', 'rgb(148,77,17)', 'rgb(147,71,16)', 'rgb(147,66,16)', 'rgb(146,60,15)', 'rgb(145,55,14)', 'rgb(144,50,13)', 'rgb(143,44,12)', 'rgb(143,39,11)', 'rgb(142,34,11)', 'rgb(141,28,10)', 'rgb(140,23,9)', 'rgb(139,18,8)', 'rgb(139,12,8)', 'rgb(138,7,7)']
COLORS4=['rgb(191,0,0)', 'rgb(192,11,0)', 'rgb(192,23,0)', 'rgb(192,34,1)', 'rgb(193,45,1)', 'rgb(193,57,1)', 'rgb(194,68,1)', 'rgb(194,80,1)', 'rgb(194,91,2)', 'rgb(195,103,2)', 'rgb(195,114,2)', 'rgb(195,126,2)', 'rgb(196,137,2)', 'rgb(196,149,3)', 'rgb(197,161,3)', 'rgb(197,172,3)', 'rgb(197,184,3)', 'rgb(198,196,3)', 'rgb(189,198,4)', 'rgb(178,199,4)', 'rgb(167,199,4)', 'rgb(156,199,4)', 'rgb(145,200,4)', 'rgb(134,200,5)', 'rgb(123,200,5)', 'rgb(112,201,5)', 'rgb(101,201,5)', 'rgb(90,202,5)', 'rgb(79,202,6)', 'rgb(67,202,6)', 'rgb(56,203,6)', 'rgb(45,203,6)', 'rgb(34,203,7)', 'rgb(23,204,7)', 'rgb(11,204,7)', 'rgb(7,205,14)', 'rgb(7,205,26)', 'rgb(8,205,38)', 'rgb(8,206,49)', 'rgb(8,206,61)', 'rgb(8,207,73)', 'rgb(8,207,85)', 'rgb(9,207,97)', 'rgb(9,208,109)', 'rgb(9,208,120)', 'rgb(9,208,132)', 'rgb(10,209,144)', 'rgb(10,209,156)', 'rgb(10,210,168)', 'rgb(10,210,180)', 'rgb(11,210,192)', 'rgb(11,211,204)', 'rgb(11,206,211)', 'rgb(11,195,212)', 'rgb(11,184,212)', 'rgb(12,172,212)', 'rgb(12,161,213)', 'rgb(12,150,213)', 'rgb(12,138,213)', 'rgb(13,127,214)', 'rgb(13,116,214)', 'rgb(13,104,215)', 'rgb(13,93,215)', 'rgb(14,81,215)', 'rgb(14,70,216)', 'rgb(14,58,216)', 'rgb(14,47,216)', 'rgb(15,35,217)', 'rgb(15,24,217)', 'rgb(18,15,218)', 'rgb(30,15,218)', 'rgb(42,16,218)', 'rgb(54,16,219)', 'rgb(66,16,219)', 'rgb(78,16,220)', 'rgb(90,16,220)', 'rgb(102,17,220)', 'rgb(115,17,221)', 'rgb(127,17,221)', 'rgb(139,17,221)', 'rgb(151,18,222)', 'rgb(163,18,222)', 'rgb(176,18,223)', 'rgb(188,19,223)', 'rgb(200,19,223)', 'rgb(212,19,224)', 'rgb(224,19,224)', 'rgb(225,20,212)', 'rgb(225,20,201)', 'rgb(225,20,189)', 'rgb(226,20,177)', 'rgb(226,21,166)', 'rgb(226,21,154)', 'rgb(227,21,143)', 'rgb(227,21,131)', 'rgb(228,22,119)', 'rgb(228,22,108)', 'rgb(228,22,96)', 'rgb(229,22,84)', 'rgb(229,23,73)']
#---------------------------
COLORS=[]
for i in COLORS2:
string2=i[4:]
string3=string2[:len(string2)-1]
lista1=string3.split(",")
COLORS.append([int(lista1[0]),int(lista1[1]),int(lista1[2])])
#------
SIZEW=1080
SIZEH=1080
ZOOM=1 #can be up to 10**13, breaks afterwards
numbers=[[-1 for y in range(SIZEH)] for x in range(SIZEW)]
FOCUSX=-1.7400623827933990522084416706582563829664172043617186687986241846118291964415305605484071833948322574345000825
FOCUSY=0.02817533977921104899241152114431950968753907674299060857040130959588017432409201863854008146585605536156950844
PROGRESS=-1
FIRSTTIME=1
XREAL=0
YREAL=0
READY=1
ITERATIONS=1
#--------------------------
EPOCH = int(time.time())
try:
os.stat("mendelbrot_screens")
except:
os.mkdir("mendelbrot_screens")
os.mkdir("mendelbrot_screens/"+str(EPOCH))
#---------------------------
data = numpy.zeros((SIZEW,SIZEH,3), dtype=numpy.uint8)
updateSet()
EDIT: The program is saving the sets as images, since I am going to output the video from it.
+3
source to share
No one has answered this question yet
Check out similar questions: