#N canvas 427 28 691 516 10; #X obj 69 197 bang~; #X obj 39 222 snapshot~; #X obj 38 46 bng 50 1000 50 0 empty empty empty 17 7 0 10 -262144 -260097 -1; #X obj 39 249 change; #X obj 39 296 sel 0; #X obj 39 322 f; #X floatatom 55 365 17 0 0 0 - - -; #X msg 141 59 \; pd dsp 1; #X msg 205 59 \; pd dsp 1; #X obj 116 3 loadbang; #X obj 113 418 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 46 418 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 39 394 moses 1e-46; #N canvas 582 172 303 432 single 0; #X obj 27 20 inlet; #X msg 115 163 NORMAL \$1; #X msg 25 293 UNIT-TEST-DONE; #X obj 26 390 print unit-test; #X obj 54 364 stdout; #X obj 134 390 outlet; #X obj 25 247 t b a; #X obj 53 328 list trim; #X obj 25 215 pack s f s; #X obj 81 187 r \$0-classname; #X msg 26 163 SUBNORMAL \$1; #X msg 80 45 2; #X floatatom 80 102 15 0 0 0 - - -; #X obj 79 17 loadbang; #X obj 80 73 pow -126; #X obj 27 124 moses; #X text 91 122 smallest normal value for float; #X msg 135 356 set \$1 \$2 \$3; #X connect 0 0 15 0; #X connect 1 0 8 0; #X connect 2 0 3 0; #X connect 2 0 4 0; #X connect 6 0 2 0; #X connect 6 1 17 0; #X connect 6 1 7 0; #X connect 7 0 3 0; #X connect 7 0 4 0; #X connect 8 0 6 0; #X connect 9 0 8 2; #X connect 10 0 8 0; #X connect 11 0 14 0; #X connect 13 0 11 0; #X connect 14 0 12 0; #X connect 14 0 15 1; #X connect 15 0 10 0; #X connect 15 1 1 0; #X connect 17 0 5 0; #X restore 103 442 pd single; #N canvas 187 45 257 407 double 0; #X obj 27 20 inlet; #X msg 24 279 UNIT-TEST-DONE; #X obj 25 366 print unit-test; #X obj 52 339 stdout; #X obj 131 366 outlet; #X obj 25 241 t b a; #X msg 115 143 NORMAL \$1; #X obj 53 308 list trim; #X obj 25 217 pack s f s; #X obj 82 187 r \$0-classname; #X msg 26 143 SUBNORMAL \$1; #X msg 72 48 2; #X obj 71 20 loadbang; #X obj 72 76 pow -1022; #X floatatom 73 111 20 0 0 0 - - -; #X obj 27 108 moses; #X msg 132 331 set \$1 \$2 \$3; #X connect 0 0 15 0; #X connect 1 0 3 0; #X connect 1 0 2 0; #X connect 5 0 1 0; #X connect 5 1 16 0; #X connect 5 1 7 0; #X connect 6 0 8 0; #X connect 7 0 2 0; #X connect 7 0 3 0; #X connect 8 0 5 0; #X connect 9 0 8 2; #X connect 10 0 8 0; #X connect 11 0 13 0; #X connect 12 0 11 0; #X connect 13 0 14 0; #X connect 13 0 15 1; #X connect 15 0 10 0; #X connect 15 1 6 0; #X connect 16 0 4 0; #X restore 39 442 pd double; #X msg 39 477 SUBNORMAL 1.0581381223108e-310 filterortho~; #N canvas 683 194 435 442 more 0; #X msg 39 359 2; #X floatatom 39 413 15 0 0 0 - - -; #X obj 39 330 t b f; #X msg 38 46 2; #X floatatom 55 99 15 0 0 0 - - -; #X obj 38 385 pow; #X obj 37 18 loadbang; #X floatatom 38 306 5 0 0 0 - - -; #X floatatom 40 155 15 0 0 0 - - -; #X text 36 254 check how small a non-zero value can be represented ; #X text 37 184 Some CPU architectures support denormal numbers by default. Repeated calculation of subnormal numbers can happen in recursive filters \, feedback delay lines \, reverb simulators etc. This slows down calculation considerably.; #X obj 54 71 pow -126; #X obj 39 126 pow -1022; #X text 143 154 smallest bnormal value for double; #X msg 39 277 -127; #X msg 82 276 -1023; #X text 156 98 smallest normal value for float; #X connect 0 0 5 0; #X connect 2 0 0 0; #X connect 2 1 5 1; #X connect 3 0 11 0; #X connect 3 0 12 0; #X connect 5 0 1 0; #X connect 6 0 3 0; #X connect 7 0 2 0; #X connect 11 0 4 0; #X connect 12 0 8 0; #X connect 14 0 7 0; #X connect 15 0 7 0; #X restore 307 142 pd more; #X text 57 343 smallest non-zero number seen by [snapshot~]; #X text 301 74 In this patch we test if the subnormals-flush routine works as expected. Open [pd more] to see how small subnormals can go for a given precision.; #X obj 336 476 s \$0-classname; #X obj 336 448 symbol; #X obj 337 398 loadbang; #X obj 39 166 creb/filterortho~; #X msg 336 423 filterortho~; #X text 303 6 [creb/filterortho~] checks for subnormals once per signal block. Therefore \, subnormals do happen when the curve approaches zero \, but only for a short period of time (depending on blocksize). ; #X obj 115 29 t b b; #N canvas 550 199 205 218 click~ 0; #X obj 35 25 inlet; #X obj 37 127 sig~; #X msg 36 90 50; #X msg 74 88 0; #X obj 74 59 delay 2; #X obj 37 169 outlet~; #X connect 0 0 2 0; #X connect 0 0 4 0; #X connect 1 0 5 0; #X connect 2 0 1 0; #X connect 3 0 1 0; #X connect 4 0 3 0; #X restore 39 111 pd click~; #X obj 39 272 abs; #N canvas 626 222 402 246 write 0; #X obj 27 38 inlet; #X obj 25 198 tabwrite \$0-smallnumbers; #X obj 26 91 t f b; #X obj 54 132 f; #X obj 85 132 + 1; #X obj 132 35 inlet; #X msg 132 89 const 0; #X msg 70 94 0; #X obj 133 133 s \$0-smallnumbers; #X msg 188 89 arrayviewclose; #X connect 0 0 2 0; #X connect 2 0 1 0; #X connect 2 1 3 0; #X connect 3 0 4 0; #X connect 3 0 1 1; #X connect 4 0 3 1; #X connect 5 0 6 0; #X connect 5 0 7 0; #X connect 5 0 9 0; #X connect 6 0 8 0; #X connect 7 0 3 1; #X connect 9 0 8 0; #X restore 79 323 pd write; #X obj 457 211 s \$0-smallnumbers; #X msg 456 179 arrayviewlistnew; #X obj 455 250 table \$0-smallnumbers 10000; #X obj 169 198 snapshot~; #X obj 169 225 change; #X obj 169 172 metro 100; #X obj 168 143 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X floatatom 179 253 20 0 0 0 - - -; #X obj 168 277 print; #X msg 53 137 setBP 100 2; #X connect 0 0 1 0; #X connect 1 0 3 0; #X connect 2 0 26 0; #X connect 2 0 28 1; #X connect 3 0 27 0; #X connect 4 0 5 0; #X connect 4 1 5 1; #X connect 4 1 28 0; #X connect 5 0 6 0; #X connect 5 0 12 0; #X connect 9 0 25 0; #X connect 12 0 11 0; #X connect 12 0 14 0; #X connect 12 1 10 0; #X connect 12 1 13 0; #X connect 13 0 15 0; #X connect 14 0 15 0; #X connect 20 0 19 0; #X connect 21 0 23 0; #X connect 22 0 1 0; #X connect 22 0 32 0; #X connect 23 0 20 0; #X connect 25 0 2 0; #X connect 25 1 7 0; #X connect 25 1 38 0; #X connect 26 0 22 0; #X connect 27 0 4 0; #X connect 30 0 29 0; #X connect 32 0 33 0; #X connect 33 0 36 0; #X connect 33 0 37 0; #X connect 34 0 32 0; #X connect 35 0 34 0; #X connect 38 0 22 0;