The MASM Forum

Toddler's Corner => Romper Room => Topic started by: jj2007 on August 04, 2017, 01:28:04 AM

Title: Playing
Post by: jj2007 on August 04, 2017, 01:28:04 AM
Playing with copying Unicode directly from RichMasm to the forum (in the current version, the ???? have to be replaced manually).

        Sound "大桥在混乱的水.mp3"   ; Unicode names are allowed

Could be worse :biggrin:
Title: Re: Playing
Post by: jj2007 on August 07, 2017, 11:22:07 PM
QuadMath example:

include \masm32\MasmBasic\MasmBasic.inc         ; download (http://masm32.com/board/index.php?topic=94.0)
  SetGlobals REAL16 oDest, Pi16, numInt:DWORD
  Init quad
  MovVal Pi16, "3.1415926535897932384626433832795028841971"
  ; int 3
  movups oDest, QuadMath(frexpq, Pi16, &numInt)
  nops 8
  PrintLine "QuadMath frexp: mantissa=", Tb$, Quad$(oDest), Str$(", expo=%i", numInt)
  Inkey Str$("expected mantissa (PI/4):\t%Je\n", PI/4)
EndOfCode


Output:
Code: [Select]
QuadMath frexp: mantissa=       7.85398163397448309615660845819876e-01, expo=2
expected mantissa (PI/4):       7.853981633974483097e-01

Source (*.asc - opens with WordPad or RichMasm (http://masm32.com/board/index.php?topic=5314.0)) & exe attached, plus an exe with an int 3 inserted for easier debugging.
Title: Re: Playing
Post by: jj2007 on August 16, 2017, 06:53:13 AM
Just for fun, a little test with the disassembled FreeBasic fbc.exe:

include \masm32\MasmBasic\MasmBasic.inc         ; download (http://masm32.com/board/index.php?topic=94.0)
  SetGlobals ctEsp, ctPush, ctPop
  Init
  PrintCpu 0
  .if !Exist("DisAsFbc.txt")
        UnzipInit "http://www.webalice.it/jj2006/DisAsFbc.zip"  ; UnzipInit (http://www.webalice.it/jj2006/MasmBasicQuickReference.htmMb1234) expects a filename or URL, returns a comment (if present); edx has records
       .if Sign?
                Print eax       ; print an error message
       .else
                UnzipFile(0, CurDir$())
                UnzipExit
        .endif
  .endif
  NanoTimer()
  Recall "DisAsFbc.txt", L$()
  Print Str$("%i ms to read the file into an array\n", NanoTimer(ms))
  Print Str$("Now checking %i lines for 'esp':\n", L$(?))
  NanoTimer()
  For_ ct=0 To L$(?)-1
        .if Instr_(L$(ct), "esp")
                inc ctEsp
        .endif
  Next
  Print Str$("%i ms to count 'esp'\n", NanoTimer(ms))
  Inkey Str$("There are %i matches for 'esp'", ctEsp)
EndOfCode


Code: [Select]
Intel(R) Core(TM) i5-2450M CPU @ 2.50GHz
14 ms to read the file into an array
Now checking 250281 lines for 'esp':
24 ms to count 'esp'
There are 14399 matches for 'esp'

Source & exe (30.5k) attached.
Title: Re: Playing
Post by: jj2007 on August 16, 2017, 08:10:38 PM
Generates a long string of lowercase characters and counts how often esp appears:

include \masm32\MasmBasic\MasmBasic.inc         ; download (http://masm32.com/board/index.php?topic=94.0)
  Init
  totalsize=50000000
  mov ecx, totalsize
  Let edi=New$(ecx)
  .Repeat
        add Rand(26), 97        ; range 97... 122
        mov [edi+ecx], al
        dec ecx
  .Until Sign?
  PrintLine Left$(edi, 50)
  NanoTimer()
  Inkey Str$("Counting %i occurrences of 'esp' in the string", Count(edi, "esp")), Str$(" took %2f seconds", NanoTimer(ms)/1000)
EndOfCode
Title: Re: Playing with Unicode
Post by: jj2007 on August 18, 2017, 09:49:20 PM
Docs: e.g. wLet (http://www.webalice.it/jj2006/MasmBasicQuickReference.htm#Mb1248), Recall  (http://www.webalice.it/jj2006/MasmBasicQuickReference.htm#Mb1172)- search inside the page for more.


include \masm32\MasmBasic\MasmBasic.inc
  SetGlobals lines, pos1, w$, break
  Init
  NanoTimer()
  Recall "mshtmlc.biUC", L$()   ; read a Unicode file (5,026,824 bytes)
  Print Str$("reading %i lines", L$(?)), Str$(" took %i ms\n", NanoTimer(ms))
  For_ ct=0 To L$(?)-1
        Let w$=wRec$(L$(ct))    ; translate Utf8$ to true Unicode
       .if wInstr(w$, "end type") && !break
                wMsgBox 0, eax, "Mark this line (no=delete):", MB_YESNOCANCEL
                .if eax==IDYES
                                wLet L$(ct)="** marked ** "+w$
                .elseif eax==IDCANCEL
                                or break, -1
                .else
                                Delete L$(ct)
                .endif
        .else
                wLet L$(ct)=w$
        .endif
  Next
  Open "O", 1, "modified_mshtmlc.biUC"
  Print 1, Chr$(0FFh, 0FEh)
  For_ ct=0 To L$(?)-1
        wPrintLine 1, wStr$("%i\t", ct), L$(ct)
  Next
  Close
  Inkey "bye"
EndOfCode
Title: Re: Playing
Post by: jj2007 on August 19, 2017, 04:46:02 AM
include \masm32\MasmBasic\MasmBasic.inc
assCt=0
AssignCt MACRO arg
  xchg eax, arg
  mov tCount(assCt), eax
  assCt=assCt+1
ENDM

  Init
  PrintCpu 0                            ; for better comparisons ;-)

  Let esi=FileRead$("mshtmlc.bi")      ; 2,488,437 bytes

  $Data type sp case-sensitive, no sp cs, cs+full word, sp+case-insensitive, no sp cis, cis+fw, 1st char case-insensitive, 1st cis+fw
  $Data end type sp case-sensitive, end type sp cis, end type cs, end type cis
  Read Desc$()

  Dim tCount() As DWORD

  NanoTimer()
  AssignCt Count(esi, "type ", 0)      ; type<space>, 0=case-sensitive
  AssignCt Count(esi, "type", 0)       ; no space, case-sensitive
  AssignCt Count(esi, "type", 4)       ; 4=cs+full word
  AssignCt Count(esi, "type ", 1)      ; space, 1=case-insensitive
  AssignCt Count(esi, "type", 1)       ; no space, case-insensitive
  AssignCt Count(esi, "type", 1+4)     ; 1=case-insensitive, full word
  AssignCt Count(esi, "type", 2)       ; 2=first char case-insensitive
  AssignCt Count(esi, "type", 2+4)     ; 2=first char case-insensitive, full word
  AssignCt Count(esi, "end type ", 0)  ; type<space>, 0=case-sensitive
  AssignCt Count(esi, "end type ", 1)  ; type<space>, 1=case-insensitive
  AssignCt Count(esi, "end type", 0)   ; type, 0=case-sensitive
  AssignCt Count(esi, "end type", 1)   ; type, 1=case-sensitive
  Print Str$("counting took %2f seconds\n", NanoTimer(us)/1000000)
  For_ ct=0 To Desc$(?)-1
        PrintLine Str$(ct), Str$("\t%i matches\t", tCount(ct)), "[", Desc$(ct), "]"
  Next
  Inkey "for comparison: MS Word, case sensitive, full word: 2563-845=1718"
EndOfCode


Output:
Code: [Select]
Intel(R) Core(TM) i5-2450M CPU @ 2.50GHz
counting took 0.027 seconds
0       1583 matches    [type sp case-sensitive]
1       2573 matches    [no sp cs]
2       2563 matches    [cs+full word]
3       1636 matches    [sp+case-insensitive]
4       5356 matches    [no sp cis]
5       2595 matches    [cis+fw]
6       5324 matches    [1st char case-insensitive]
7       2563 matches    [1st cis+fw]
8       0 matches       [end type sp case-sensitive]
9       0 matches       [end type sp cis]
10      845 matches     [end type cs]
11      845 matches     [end type cis]
for comparison: MS Word, case sensitive, full word: 2563-845=1718
Title: RichMasm beta
Post by: jj2007 on September 14, 2017, 10:56:48 AM
The new menu looks certainly different :bgrin:

Beta attached, use at your own risk. Extract as
\Masm32\MasmBasic\Res\UserDef\RichMasm.ini
\Masm32\MasmBasic\RichMasm.exe
Title: Re: Playing
Post by: jj2007 on September 15, 2017, 04:34:35 AM
New version - we are getting nearer  :t

Interesting that the screenshot taken with an aero theme shows the tooltip, while the "normal" theme doesn't allow to capture the tip. This stuff is really messy. For example, if you have Aero enabled, Dwmapi::DwmIsCompositionEnabled returns 1 but uxtheme::IsCompositionActive returns 0 ::)

MSDN Social has a How to detect if Aero is enabled (https://social.msdn.microsoft.com/Forums/en-US/b63d4cdc-3648-4650-9ec9-fdd47b007b10/how-to-detect-if-aero-is-enabled-developing-in-vs6?forum=vcgeneral) thread:
Quote
VC6 is far too old and too rotten to support to find out if Aero is enabled or not

I like their sense of humour :P
Title: Re: Playing
Post by: hutch-- on September 17, 2017, 03:39:26 PM
What I would really like is a decent 64 bit dis-assembler and so far I have not found one. The ARkDasm I have been using was very good for analysis during the development of 64 bit MASM but its asm output is too different to be useful for re-constructing asm code from a binary file. The best I have so far is the ordinary Microsoft Dumpbin with its results being able to be re-formatted back into MASM code with some massaging.
Title: Re: Playing
Post by: jj2007 on September 17, 2017, 06:48:06 PM
What's wrong with x64 except that they have ruthlessly stolen ideas from Olly?
Code: [Select]
include \Masm32\MasmBasic\Res\JBasic.inc
Init ; OPT_64 1 ; put 0 for 32 bit, 1 for 64 bit assembly
  PrintLine Chr$("This code was assembled with ", @AsmUsed$(1), " in ", jbit$, "-bit format")
  int 3 ; BREAK
  fldpi ; the FPU still exists!
  sub rsp, QWORD
  fld st
  fistp qword ptr [esp]
  movlps xmm0, qword ptr [esp]
  fst qword ptr [esp]
  movlps xmm1, qword ptr [esp]
  add rsp, QWORD
  MsgBox 0, "Wow, it works!!!!", "Hi", MB_OK or MB_SETFOREGROUND
EndOfCode

Code: [Select]
000000014000108D | CC                                | int3                                  |
000000014000108E | D9 EB                             | fldpi                                 |
0000000140001090 | 48 83 EC 08                       | sub rsp, 8                            |
0000000140001094 | D9 C0                             | fld st0                               |
0000000140001096 | 67 DF 3C 24                       | fistp qword ptr ds:[esp]              |
000000014000109A | 67 0F 12 04 24                    | movlps xmm0, qword ptr ds:[esp]       |
000000014000109F | 67 DD 14 24                       | fst qword ptr ds:[esp]                |
00000001400010A3 | 67 0F 12 0C 24                    | movlps xmm1, qword ptr ds:[esp]       |
00000001400010A8 | 48 83 C4 08                       | add rsp, 8                            |
00000001400010AC | 48 8D 15 C6 01 00 00              | lea rdx, qword ptr ds:[140001279]     | 140001279:"Wow, it works!!"
00000001400010B3 | 49 C7 C1 00 00 01 00              | mov r9, 10000                         |
00000001400010BA | 4C 8D 05 C8 01 00 00              | lea r8, qword ptr ds:[140001289]      | 140001289:"Hi"
00000001400010C1 | 33 C9                             | xor ecx, ecx                          |
00000001400010C3 | FF 15 27 03 00 00                 | call qword ptr ds:[<&MessageBoxA>]    |
00000001400010C9 | 33 C9                             | xor ecx, ecx                          |
00000001400010CB | FF 15 3F 03 00 00                 | call qword ptr ds:[<sub_140001410>]   |
00000001400010D1 | 48 8D 0D B4 01 00 00              | lea rcx, qword ptr ds:[<sub_14000128C | 14000128C:"user32"
00000001400010D8 | 48 8D 15 01 03 00 00              | lea rdx, qword ptr ds:[<sub_1400013E0 |
00000001400010DF | E8 27 00 00 00                    | call <sub_14000110B>                  |
00000001400010E4 | C3                                | ret                                   |
Title: Re: Playing
Post by: aw27 on September 17, 2017, 07:49:21 PM
What I would really like is a decent 64 bit dis-assembler and so far I have not found one. The ARkDasm I have been using was very good for analysis during the development of 64 bit MASM but its asm output is too different to be useful for re-constructing asm code from a binary file. The best I have so far is the ordinary Microsoft Dumpbin with its results being able to be re-formatted back into MASM code with some massaging.
Visual Studio is passable.
1) Follow the instructions here (https://msdn.microsoft.com/en-us/library/0bxe8ytt.aspx).
2) Press F11 and you are right at your code startup.
3) If you don't see the disassembly window, open it with Ctrl-Alt-D
Title: Re: Playing
Post by: jj2007 on September 24, 2017, 11:06:30 AM
include \masm32\MasmBasic\MasmBasic.inc         ; download (http://masm32.com/board/index.php?topic=94.0)
  SetGlobals My$="Text has many characters. Any chars that are available for removal?"
  Init
  PrintLine "Unicode:"
  For_ ecx=1 To wCL$(?)-1
        wPrintLine "[", wCL$(ecx), "]"
  Next
  PrintLine CrLf$, "Ansi:"
  For_ ecx=1 To CL$(?)-1
        PrintLine "[", CL$(ecx), "]"
  Next
  Print My$, Tb$, "the original", CrLf$  ; options as in Instr_() (http://www.webalice.it/jj2006/MasmBasicQuickReference.htm#Mb1153)
  Print Replace$(My$, "a", "_"), Tb$, "'a' replaced with '_'", CrLf$
  Print Replace$(My$, "a", 0), Tb$, Tb$, "remove 'a', case-sensitive", CrLf$
  Print Replace$(My$, "any", 0), Tb$, "any, case-sensitive", CrLf$
  Print Replace$(My$, "any", 0, 1), Tb$, Tb$, "any, case-insensitive", CrLf$
  Print Replace$(My$, "any", 0, 5), Tb$, "any, case-insensitive, full word", CrLf$
  Print Replace$(My$, "any", 0, 2), Tb$, Tb$, "any, 1st char case-insensitive", CrLf$
EndOfCode

OPT_Arg1        Here are some arguments for you: Введите текст здесь    ; pass arguments to commandline


Code: [Select]
Unicode:
[Here]
[are]
[some]
[arguments]
[for]
[you:]
[Введите]
[текст]
[здесь]

Ansi:
[Here]
[are]
[some]
[arguments]
[for]
[you:]
[???????]
[?????]
[?????]
Text has many characters. Any chars that are available for removal?     the original
Text h_s m_ny ch_r_cters. Any ch_rs th_t _re _v_il_ble for remov_l?     'a' replaced with '_'
Text hs mny chrcters. Any chrs tht re vilble for removl?                remove 'a', case-sensitive
Text has m characters. Any chars that are available for removal?        any, case-sensitive
Text has m characters.  chars that are available for removal?           any, case-insensitive
Text has many characters.  chars that are available for removal?        any, case-insensitive, full word
Text has m characters.  chars that are available for removal?           any, 1st char case-insensitive
Title: Java MessageBox
Post by: jj2007 on September 27, 2017, 01:10:10 AM
Code: [Select]
import javax.swing.JOptionPane;
class HelloWorldApp {
    public static void main(String[] args) {
System.out.println("Java sucks");
//JOptionPane.showMessageDialog(null,"message","title");
    }
}

The good news: It compiles and runs fine :t
The bad news: Removing the // before JOptionPane produces the usual cryptic error messages that one must expect from so-called "high level" languages:
Code: [Select]
HelloWorld.java:6: error: no suitable method found for showMessageDialog(<null>,String,String)
JOptionPane.showMessageDialog(null,"message","title");
           ^
    method JOptionPane.showMessageDialog(Component,Object) is not applicable
      (actual and formal argument lists differ in length)
    method JOptionPane.showMessageDialog(Component,Object,String,int) is not applicable
      (actual and formal argument lists differ in length)
    method JOptionPane.showMessageDialog(Component,Object,String,int,Icon) is not applicable
      (actual and formal argument lists differ in length)
1 error

This is a standard example found all over the web. There is a magic ingredient missing (and no, it's not the shitty little semicolons at the end of each line...) :icon_mrgreen:

Paul Kiddie: Creating a MessageBox in Java (http://www.paulkiddie.com/2010/01/creating-a-messagebox-in-java/):
Quote
JOptionPane.showMessageDialog(null,"message","title"));

This creates and shows a message dialog with no parent with message “message and the title “title”.

alvin alexander: Java: JOptionPane showMessageDialog examples (http://)
Quote
JOptionPane.showMessageDialog(frame,
        "Problem writing to backup directory: '" + backupDir + "'.");
Title: Re: Playing
Post by: hutch-- on September 27, 2017, 04:37:33 AM
 :biggrin:
Title: Integers vs floats vs doubles
Post by: jj2007 on October 24, 2017, 10:21:18 AM
Fixed point math benchmark at FreeBasic forum (https://www.freebasic.net/forum/viewtopic.php?f=3&t=26039&p=238271&sid=05f3a64452fbed1a607c99f913b2a689#p238269):
Code: [Select]
Dim As Double d1 = 299991, d2 = 299990, d3 = 1
Dim As Long i1 = 299991, i2 = 299990, i3 = 1
  For k = 1 To 1000
d3 *= d1
d3 /= d2
n += 1
  Next k

Code: [Select]
Intel(R) Core(TM) i5-2450M CPU @ 2.50GHz (SSE4)

Result=20669358
20784   cycles for 10 * integers
Result=16585998
16877   cycles for 10 * floats
Result=16585998
15576   cycles for 10 * doubles

14380   cycles for 10 * integers
11637   cycles for 10 * floats
11651   cycles for 10 * doubles

14389   cycles for 10 * integers
11671   cycles for 10 * floats
11678   cycles for 10 * doubles

14402   cycles for 10 * integers
11703   cycles for 10 * floats
11672   cycles for 10 * doubles

97      bytes for integers
109     bytes for floats
109     bytes for doubles
Title: Re: Playing
Post by: hutch-- on October 24, 2017, 02:09:09 PM
 :biggrin:

Intel(R) Core(TM) i7-5820K CPU @ 3.30GHz (SSE4)

Result=20669358
17113   cycles for 10 * integers
Result=16585998
11101   cycles for 10 * floats
Result=16585998
10955   cycles for 10 * doubles

13384   cycles for 10 * integers
9058    cycles for 10 * floats
9044    cycles for 10 * doubles

13304   cycles for 10 * integers
9051    cycles for 10 * floats
9060    cycles for 10 * doubles

13291   cycles for 10 * integers
9043    cycles for 10 * floats
9074    cycles for 10 * doubles

97      bytes for integers
109     bytes for floats
109     bytes for doubles


--- ok ---
Title: Re: Playing
Post by: sinsi on October 24, 2017, 03:05:22 PM
Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz (SSE4)

Result=20669358
15380   cycles for 10 * integers
Result=16585998
10234   cycles for 10 * floats
Result=16585998
12027   cycles for 10 * doubles

12593   cycles for 10 * integers
8745    cycles for 10 * floats
8766    cycles for 10 * doubles

12557   cycles for 10 * integers
8739    cycles for 10 * floats
8755    cycles for 10 * doubles

12560   cycles for 10 * integers
8745    cycles for 10 * floats
8748    cycles for 10 * doubles

97      bytes for integers
109     bytes for floats
109     bytes for doubles
Title: Re: Playing
Post by: Siekmanski on October 24, 2017, 03:20:03 PM
Intel(R) Core(TM) i7-4930K CPU @ 3.40GHz (SSE4)

Result=20669358
21188   cycles for 10 * integers
Result=16585998
14878   cycles for 10 * floats
Result=16585998
14538   cycles for 10 * doubles

14719   cycles for 10 * integers
10128   cycles for 10 * floats
10270   cycles for 10 * doubles

14097   cycles for 10 * integers
10136   cycles for 10 * floats
10184   cycles for 10 * doubles

14090   cycles for 10 * integers
10170   cycles for 10 * floats
10167   cycles for 10 * doubles

97      bytes for integers
109     bytes for floats
109     bytes for doubles
Title: Re: Playing
Post by: six_L on October 24, 2017, 05:25:55 PM
Quote
Intel(R) Core(TM) i7-5500U CPU @ 2.40GHz (SSE4)
-19 of 20 tests valid,
Result=20669358
10368   cycles for 10 * integers
Result=16585998
10956   cycles for 10 * floats
Result=16585998
5953   cycles for 10 * doubles

8575   cycles for 10 * integers
5538   cycles for 10 * floats
5549   cycles for 10 * doubles

8505   cycles for 10 * integers
5545   cycles for 10 * floats
5553   cycles for 10 * doubles

8509   cycles for 10 * integers
5549   cycles for 10 * floats
5551   cycles for 10 * doubles

97   bytes for integers
109   bytes for floats
109   bytes for doubles


--- ok ---

Title: Re: Playing
Post by: aw27 on October 24, 2017, 11:40:05 PM
This is from my recent notebook, actually "faster" than the i7 desktops I have here.

Intel(R) Core(TM) i5-7300HQ CPU @ 2.50GHz (SSE4)

Result=20669358
9641   cycles for 10 * integers
Result=16585998
6540   cycles for 10 * floats
Result=16585998
5303   cycles for 10 * doubles

8377   cycles for 10 * integers
6687   cycles for 10 * floats
4763   cycles for 10 * doubles

8067   cycles for 10 * integers
5396   cycles for 10 * floats
5027   cycles for 10 * doubles

8907   cycles for 10 * integers
5002   cycles for 10 * floats
11924   cycles for 10 * doubles

97   bytes for integers
109   bytes for floats
109   bytes for doubles


--- ok ---
Title: Re: Playing
Post by: jj2007 on October 25, 2017, 12:41:36 AM
Thanks to everybody :icon14:

So the conclusion seems to be: don't bother with integers, doubles are much faster.
Title: Sorting an array of doubles
Post by: jj2007 on October 26, 2017, 11:44:49 AM
Playing with an ordinary array of doubles (following a FreeBasic thread (https://www.freebasic.net/forum/viewtopic.php?f=3&t=17756)):
Code: [Select]
Intel(R) Core(TM) i5-2450M CPU @ 2.50GHz
generating 10000000 elements with MasmBasic Rand() took 188 ms
sorting took 1935 ms    (random)
sorting took 724 ms     (sorted)
sorting took 726 ms     (reversed)

top values:
999999.666120860
999999.510124329
999999.437946829
999999.430961910
999999.392312023

middle values:
485.134311021929
484.920106829768
484.847463668948
484.597403557664
484.515912832385

low values:
-999998.337589204
-999998.381827027
-999998.455401510
-999998.697079718
-999998.909886926

Source and exes attached. Does anybody know what happened to the incredibly fast table sort?

MichaelW in Table sort. Fastest sort algo I've ever come to know... (https://www.freebasic.net/forum/viewtopic.php?f=7&t=15304):
Quote
In my tests sorting the int_list array, and reshuffling it between the sorts, the table sort was ~800 times faster than the CRT qsort, and ~250 times faster than an optimized, integer array only version of the Microsoft qsort code from the PSDK
Title: Re: Playing
Post by: six_L on October 26, 2017, 01:07:01 PM
Quote
Intel(R) Core(TM) i7-5500U CPU @ 2.40GHz
generating 10000000 elements with MasmBasic Rand() took 164 ms
sorting took 1564 ms   (random)
sorting took 563 ms   (sorted)
sorting took 579 ms   (reversed)

top values:
999999.667983505
999999.129213396
999998.870305720
999998.722691092
999997.930601242

middle values:
102.337449790602
101.637560875778
101.326499135857
101.112294943695
101.109966637259

low values:
-999999.128747731
-999999.234918505
-999999.593477696
-999999.688006938
-999999.893829226
Title: Re: Playing
Post by: Siekmanski on October 26, 2017, 10:32:40 PM
Is table sort a special case sorting algorithm for rows and columns?

Code: [Select]
Intel(R) Core(TM) i7-4930K CPU @ 3.40GHz
generating 10000000 elements with MasmBasic Rand() took 150 ms
sorting took 1379 ms    (random)
sorting took 518 ms     (sorted)
sorting took 521 ms     (reversed)

top values:
999999.702442441
999999.508727345
999999.434221539
999999.387189749
999999.148771170

middle values:
518.907327206498
518.879853190547
518.851447852021
518.782995642787
518.665183337098

low values:
-999997.963197529
-999998.359475285
-999998.406041414
-999999.026302248
-999999.867286533
Title: Re: Playing
Post by: jj2007 on October 26, 2017, 10:40:51 PM
Is table sort a special case sorting algorithm for rows and columns?

No idea. The exe I posted uses MasmBasic's ArraySort (a radix sort), but I wonder what kind of animal is that table sort: "the table sort was ~800 times faster than the CRT qsort" (MichaelW, a serious person as we all know).