japhb | . | 01:05 | |
MasterDuke | IOninja++ that was fast work with Range | 01:54 | |
Geth | rakudo/nom: 295b0bff8b | (Samantha McVey)++ | 3 files Add base 1 functionality to .base and .parse-base |
08:22 | |
samcv | there we go. base 1 numbers for everybody! | 08:23 | |
timotimo | who gets to be 1, and who gets to be 11? | ||
samcv | 1 and 2 | ||
Geth | roast: 2a3e1f9610 | (Samantha McVey)++ | 2 files Test base and parse-base for base 1 |
||
moritz | samcv: have you tested it with base "1"? | 08:26 | |
samcv | yes? | ||
isn't that implied | |||
moritz | with a string, not an Int, that is | ||
samcv | yes | ||
oh uhm | |||
'1'.base? | |||
m: '1'.base(2) | |||
camelia | rakudo-moar f85978: OUTPUT«No such method 'base' for invocant of type 'Str' in block <unit> at <tmp> line 1» | ||
moritz | '1111'.parse-base('1') | ||
samcv | no that works | ||
Add base 1 functionality to .base and .parse-base | 08:27 | ||
^commit | |||
moritz | 'cause I see an Int:D candidate for for the base 1 case, but the base case is coercive | ||
so I wonder how that works | |||
samcv | oh | ||
m: say '11'.parse-base('1') | |||
camelia | rakudo-moar f85978: OUTPUT«Type check failed in binding to $radix; expected Int but got Str ("1") in block <unit> at <tmp> line 1» | ||
samcv | dunno what you're talking about? | 08:28 | |
moritz | m: say '11'.parse-base('4') | ||
camelia | rakudo-moar f85978: OUTPUT«Type check failed in binding to $radix; expected Int but got Str ("4") in block <unit> at <tmp> line 1» | ||
timotimo | oh, did that break? | ||
moritz | sorry, must've been confused | ||
m: say 42.base('5') | |||
camelia | rakudo-moar f85978: OUTPUT«132» | ||
samcv | bisectable6, say '11.parse-base('10') | ||
bisectable6 | samcv, On both starting points (old=2015.12 new=295b0bf) the exit code is 1 and the output is identical as well | ||
samcv, gist.github.com/1aa0ac9fdcf4026917...e857edaaa6 | |||
samcv | bisectable6, say '11'.parse-base('10') | ||
bisectable6 | samcv, Bisecting by output (old=2015.12 new=295b0bf) because on both starting points the exit code is 1 | ||
moritz | m: say 42.base('1') | 08:29 | |
camelia | rakudo-moar f85978: OUTPUT«base argument to base out of range. Is: 1, should be in 2..36 in block <unit> at <tmp> line 1Actually thrown at: in block <unit> at <tmp> line 1» | ||
samcv | doesn't seem to ever have worked? says bisectable | ||
bisectable6 | samcv, bisect log: gist.github.com/b7b13ca376bb5896c5...88f364f8d7 | ||
samcv, (2016-09-27) github.com/rakudo/rakudo/commit/22...0f14b9c05c | |||
moritz | that one | ||
sorry, I confused base with parse-base | |||
multi method base(Int:D: Int(Cool) $base, $digits?) { | |||
samcv | no base is not a multi | ||
err wait. nope it is | 08:30 | ||
i got them confused too | |||
m: say 10'.base('10') | |||
camelia | rakudo-moar 295b0b: OUTPUT«5===SORRY!5=== Error while compiling <tmp>Two terms in a rowat <tmp>:1------> 3say 107⏏5'.base('10') expecting any of: infix infix stopper postfix statement end statement modifier…» | ||
samcv | m: say '10'.base('10') | 08:31 | |
camelia | rakudo-moar 295b0b: OUTPUT«No such method 'base' for invocant of type 'Str' in block <unit> at <tmp> line 1» | ||
samcv | m: say 10.base('10') | ||
camelia | rakudo-moar 295b0b: OUTPUT«10» | ||
samcv | k | ||
will fix | 08:36 | ||
m: say 10.base(1) | |||
camelia | rakudo-moar 295b0b: OUTPUT«1111111111» | ||
samcv | sweet | ||
but uh moritz the second argument makes no sense for .base | 08:37 | ||
m: say 2.base(2) | |||
camelia | rakudo-moar 295b0b: OUTPUT«10» | ||
samcv | m: say 2.base(2, 2) | 08:38 | |
camelia | rakudo-moar 295b0b: OUTPUT«10.00» | ||
samcv | there is no 0 in base 1 | ||
i guess it's fine to ignore it | |||
since it makes no sense anyway | |||
moritz, you think it should be ignored, or to throw when somebody does 10.base(1, 1) | 08:40 | ||
or maybe just do 1111111111. | |||
idk either way it's dumb | 08:41 | ||
star: 4.2.base(1).say | 08:42 | ||
camelia | star-m 2016.10: OUTPUT«Attempt to divide 1.6094379124341 by zero using / in block <unit> at <tmp> line 1Actually thrown at: in block <unit> at <tmp> line 1» | ||
samcv | star: 4.2.base(2).say | ||
camelia | star-m 2016.10: OUTPUT«100.001101» | ||
samcv | that should be fixed | ||
i guess. idk | |||
wtf would 4.2 in base 1 even be | 08:43 | ||
m: say '1111'.parse-base(1) | |||
camelia | rakudo-moar 295b0b: OUTPUT«4» | ||
samcv | m: say '11011'.parse-base(1) | 08:44 | |
camelia | rakudo-moar 295b0b: OUTPUT«Cannot convert string to number: malformed base-1 number in '0311⏏05011' (indicated by ⏏) in block <unit> at <tmp> line 1Actually thrown at: in block <unit> at <tmp> line 1» | ||
samcv | m: say '111'.base('2') | 09:10 | |
camelia | rakudo-moar 295b0b: OUTPUT«No such method 'base' for invocant of type 'Str' in block <unit> at <tmp> line 1» | ||
samcv | m: say '111'.base('2',0) | ||
camelia | rakudo-moar 295b0b: OUTPUT«No such method 'base' for invocant of type 'Str' in block <unit> at <tmp> line 1» | ||
samcv | m: say 10.base('2',0) | ||
camelia | rakudo-moar 295b0b: OUTPUT«1010» | ||
samcv | m: say 10.base('2') | ||
camelia | rakudo-moar 295b0b: OUTPUT«1010» | ||
Geth | roast: 4bcf18fd39 | (Samantha McVey)++ | 2 files Test .base for Str argument as well |
09:20 | |
rakudo/nom: a21d2f9e1c | (Samantha McVey)++ | src/core/Int.pm Fix .base to allow string arguments for base 1 |
09:21 | ||
samcv | ok should all be fixed now | ||
IOninja | As I recall it, Str.base wasn't a thing on purpose | 11:06 | |
.base(1)? | 11:08 | ||
IOninja gets a cup of coffee to de-grumble | 11:10 | ||
DrForr | String to unary number... oo, that could be fun. | 11:13 | |
IOninja | OK | 11:14 | |
DrForr | eval: '𠀋𠂢'.base(1) | ||
evalable6 | DrForr, rakudo-moar a21d2f9: OUTPUT«(exit code 1) No such method 'base' for invocant of type 'Str' in block <unit> at /tmp/am2bQXimTj line 1» | ||
IOninja | The Str.base wasn't a thing on purpose, to avoid confusion of people mistakenly using it instead of Str.parse-base. | 11:15 | |
If Numeric.base(1) were ever a thing, it'd use '0' for its digits, not '1'. | 11:16 | ||
But Numeric.base(1) isn't a thing, because we already have infix:<x> and chars() for that purpose and people can use whatever digit they want for their base. | |||
DrForr | *so* glad :) | 11:17 | |
IOninja | So my opinion is to revert both the commit that adds Str.base and one that adds .base(1). | ||
samcv | there is no Str.base? | 11:19 | |
IOninja | Ah ok, misread the commit title :) | ||
samcv | yeah | 11:20 | |
there's .parse-base('2') though | |||
that is Cool | |||
the commit just made .parse-base('1') work | |||
so it could be like the other numbers | |||
IOninja | m: '000000' | ||
camelia | rakudo-moar a21d2f: OUTPUT«WARNINGS for <tmp>:Useless use of constant string "000000" in sink context (line 1)» | ||
IOninja | m: '000000'.parse-base('1').say | 11:21 | |
camelia | rakudo-moar a21d2f: OUTPUT«Type check failed in binding to $radix; expected Int but got Str ("1") in block <unit> at <tmp> line 1» | ||
samcv | in base 1, a 0 is basically the number not existing at that position. so it only needs ones | ||
IOninja | m: '000000'.parse-base(1).say | ||
camelia | rakudo-moar a21d2f: OUTPUT«Cannot convert string to number: malformed base-1 number in '030⏏0500000' (indicated by ⏏) in block <unit> at <tmp> line 1Actually thrown at: in block <unit> at <tmp> line 1» | ||
IOninja | m: '1111'.parse-base(1).say | ||
camelia | rakudo-moar a21d2f: OUTPUT«4» | ||
samcv | it uses the same notation that all the other bases do | ||
IOninja | m: say chars '1111' | ||
camelia | rakudo-moar a21d2f: OUTPUT«4» | ||
samcv | 10 in binary, the 1 is in the 2's place and a 0 in the 1's place | ||
11 in unary, there's a 1 in the 1's place and a 1 in the 1's place | |||
so it's 2 | |||
since they're all 1's places | 11:22 | ||
IOninja | Ah, right | ||
samcv | i wasn't 100% sure but then i looked into it before adding base 1 | ||
IOninja | OK. never mind then :) | 11:23 | |
(about reverting anything) | |||
Geth | nqp: 8371cb23c6 | (Jonathan Worthington)++ | tools/build/MOAR_REVISION Bump MOAR_REVISION for closed async socket fixes. |
11:29 | |
¦ nqp: version bump brought these changes: github.com/MoarVM/MoarVM/compare/2...5-g2b0739d | |||
rakudo/nom: f16cf370c1 | (Jonathan Worthington)++ | tools/build/NQP_REVISION Bump for latest MoarVM. Fixes semantics of close, write, and read of async sockets. |
11:35 | ||
¦ rakudo/nom: version bump brought these changes: github.com/perl6/nqp/compare/2017....8-g8371cb2 | |||
roast: c7abae472e | (Jonathan Worthington)++ | S32-io/IO-Socket-Async.t Test semantics of closed async socket. All three of these operations did naughty things prior to recent fixes. |
11:36 | ||
IOninja | m: say 0.base: 1 | 11:37 | |
camelia | rakudo-moar a21d2f: OUTPUT«» | ||
IOninja | m: say 0.base(1).parse-base: 1 | ||
camelia | rakudo-moar a21d2f: OUTPUT«0» | ||
IOninja | cool | ||
m: say ''.parse-base: 2 | |||
camelia | rakudo-moar a21d2f: OUTPUT«Cannot convert string to number: malformed base-2 number in '3⏏' (indicated by ⏏) in block <unit> at <tmp> line 1Actually thrown at: in block <unit> at <tmp> line 1» | ||
IOninja | hehe | ||
There's even a usecase for it: en.wikipedia.org/wiki/Golomb_coding | 11:44 | ||
m: -2 .base(1).say | |||
camelia | rakudo-moar a21d2f: OUTPUT«repeat count (-2) cannot be negative in block <unit> at <tmp> line 1» | ||
IOninja | m: '-11'.parse-base(1).say | 11:45 | |
camelia | rakudo-moar a21d2f: OUTPUT«Cannot convert string to number: malformed base-1 number in '3-11⏏' (indicated by ⏏) in block <unit> at <tmp> line 1Actually thrown at: in block <unit> at <tmp> line 1» | ||
IOninja | m: 1.1 .base(1).say | 11:50 | |
camelia | rakudo-moar a21d2f: OUTPUT«Attempt to divide 2.30258509299405 by zero using / in block <unit> at <tmp> line 1Actually thrown at: in block <unit> at <tmp> line 1» | ||
IOninja | IMO base 1 should still be removed. It's already implemented as a special case adding maintenance burden for little gain; and negatives/decimals crash with LTA errors right now and zero... do those even exist in unary base? Would they need even more special casing? Seems not worth to have this in core. | 11:52 | |
IOninja & | |||
samcv | zeros don't exist | 12:57 | |
well | |||
m: say 0.base(1) | 12:58 | ||
camelia | rakudo-moar f16cf3: OUTPUT«» | ||
samcv | that is zero | ||
m: say "".parse-base(1) | 12:59 | ||
camelia | rakudo-moar f16cf3: OUTPUT«0» | ||
IOninja | Do negatives and decimals exist? | ||
samcv | sure negatives are fine. not decimals though | ||
i will have to fix it for negative numbers | 13:00 | ||
IOninja | or... I guess in unary they are... urinals | ||
samcv | lol | ||
i mean every place equals 1 | |||
so you can't really do decimals at all | 13:01 | ||
IOninja | Feels weird to have this base TBH. | ||
m: 5.5.base($_).say for 2..36 | |||
camelia | rakudo-moar f16cf3: OUTPUT«101.112.11111211.210.2222235.35.3333345.45.4444455.55.5555565.65.6666675.75.7777785.85.8888895.95.99999A5.A5.AAAAAB5.B5.BBBBBC5.C5.CCCCCD5.D5.DDDDDE5.E5.EEEEEF5.F5.FFFFF…» | ||
samcv | though maybe we can have decimals | 13:03 | |
err wait. | |||
it would not be for all numbers | |||
i mean cause there's no zero | |||
you just have to do integers can't do decimal numbers | 13:04 | ||
that's the main part of how it differs from the other bases | |||
but i will make a more awesome error for "1.1".parse-base(1) | 13:05 | ||
you can't really parse a number that can't exist in that base can you? | |||
it's basically assumed the person already knows what base the number is in | |||
IOninja, that error when trying to do 1.5.base(2) already existed before | 13:07 | ||
fyi | |||
my changed did not create that error | |||
*changes | |||
moritz | I'm not sure I'm happy with base 1 | ||
because it's fundametally different from the other representations | 13:08 | ||
the others are polynomial, base 1 isn't | |||
IOninja | Yeah, the entire base is a special case basically: empty string is not a number for other bases, but it is for base-1; other bases have decimals, but not in base-1; the digits for all bases are (flat 0..9, A..Z)[^(base-1)], but in base-1 it's `1` and zero is not a valid digit. So basically we're declaring that all Perl 6 implementations must add a special-cased base-1; despite it not being commonly needed | ||
and trivially replicated in user's code. | |||
infix:<x>/chars basically handle all positives | |||
m: 1.5 .base(2).say | 13:09 | ||
camelia | rakudo-moar f16cf3: OUTPUT«1.1» | ||
IOninja | samcv: which error? | ||
samcv | m: say 1.4.base(1) | ||
camelia | rakudo-moar f16cf3: OUTPUT«Attempt to divide 1.6094379124341 by zero using / in block <unit> at <tmp> line 1Actually thrown at: in block <unit> at <tmp> line 1» | ||
IOninja | huh | ||
samcv | that already was there | ||
star: say 1.4.base(1) | |||
camelia | star-m 2016.10: OUTPUT«Attempt to divide 1.6094379124341 by zero using / in block <unit> at <tmp> line 1Actually thrown at: in block <unit> at <tmp> line 1» | ||
IOninja | huh² | 13:10 | |
m: say (1.4).base: 2 | |||
camelia | rakudo-moar f16cf3: OUTPUT«1.011010» | ||
IOninja | m: say 1.4.base: 2 | ||
camelia | rakudo-moar f16cf3: OUTPUT«1.011010» | ||
IOninja | oh ok | ||
IOninja needs moar coffee | |||
s: 1.4, 'base', \(1) | |||
SourceBaby | IOninja, Sauce is at github.com/rakudo/rakudo/blob/f16c...al.pm#L111 | ||
IOninja | Looks like the check that base is valid is missing in the Rational.base | 13:11 | |
m: say 12.base: 400 | |||
camelia | rakudo-moar f16cf3: OUTPUT«base argument to base out of range. Is: 400, should be in 1..36 in block <unit> at <tmp> line 1Actually thrown at: in block <unit> at <tmp> line 1» | ||
IOninja | m: say 1.2.base: 400 | ||
camelia | rakudo-moar f16cf3: OUTPUT«base argument to base out of range. Is: 400, should be in 1..36 in block <unit> at <tmp> line 1Actually thrown at: in block <unit> at <tmp> line 1» | ||
IOninja | Or rather done too late | 13:12 | |
samcv | idk we support roman numerals as numbers too | 13:15 | |
and those aren't likely to be commonly used | |||
and are another representation of a unary numeral system | |||
IOninja | Are roman numerals special cased? | 13:16 | |
samcv | well they sort of are since they are Nl or number letters. well | ||
they break when i fix moarvm to think that <alpha> === Alphabetic property | 13:17 | ||
but atm they aren't | |||
IOninja | My vote on base(1) is to not implement it in core on the grounds that it needs special casing in implementation, tests, and docs. Maybe jnthn++ or TimToady++ could offer a ruling. | 13:21 | |
samcv | i mean if it were in MVM would that make things any better? | ||
or is it more because base 1 just is different because 1^1 = 1 | 13:22 | ||
and so does not offer decimals | |||
as an aside there seems to be programming language where you convert brainfuck code to binary numbers for each symbol, then convert that binary number to unary and that is the text of your program | 13:31 | ||
haha | |||
jnthn would prefer not to move more stuff into MoarVM, fwiw | 13:32 | ||
samcv | yeah i didn't really want to move it their either | ||
samcv checkouts out IOninja's Inline::Brainfuck | 13:34 | ||
IOninja | m: say 'NaN' ~~ NaN | 13:50 | |
camelia | rakudo-moar f16cf3: OUTPUT«No such method 'isNaN' for invocant of type 'Str' in block <unit> at <tmp> line 1» | ||
IOninja | m: say 'NaN'.Numeric ~~ NaN | ||
camelia | rakudo-moar f16cf3: OUTPUT«True» | ||
Geth | rakudo/nom: 1615c83c9a | (Zoffix Znet)++ | src/core/Numeric.pm Fix Str ~~ Numeric - Don't throw if we can't coerce Str to Numeric, just return False[^1] - Don't crash with `isNaN method not found` when Numeric is a NaN [1] irclog.perlgeek.de/perl6-dev/2017-...i_14065906 |
14:00 | |
roast: 70dc421407 | (Zoffix Znet)++ | S03-smartmatch/any-num.t Test Str ~~ Num - Can handle Strs that aren't numeric without exploding - Can handle cases where Num is a NaN Rakudo fix: github.com/rakudo/rakudo/commit/1615c83c9a |
14:01 | ||
IOninja | .oO( with so much talk about explosions, this channel gotta be on some FBI watch list by now... ) |
14:02 | |
m: say (-42e0) % 2e0 | 14:13 | ||
camelia | rakudo-moar 1615c8: OUTPUT«0» | ||
IOninja | Another negative zero bugglet | ||
m: say 42 % Inf | 14:14 | ||
camelia | rakudo-moar 1615c8: OUTPUT«NaN» | ||
IOninja | m: say 42 / Inf | ||
camelia | rakudo-moar 1615c8: OUTPUT«0» | ||
IOninja | The n % Inf should be 0, not NaN | ||
(when n is not a NaN) | 14:17 | ||
IOninja will fix these | 14:18 | ||
Well, some time later... I guess I should get cracking on the IO stuff :P | 14:19 | ||
samcv | are you still a ninja if your work is in a publically accessible repository? | 14:35 | |
IOninja | :) | 14:36 | |
[Coke] expects a status report from you, young man. | 15:56 | ||
IOninja | wow, the -42e0 % 2e0 sign is a lot more complex: en.wikipedia.org/wiki/Modulo_operation | 16:08 | |
All the langs seem to be doing whatever they want. | 16:09 | ||
IEEE spec says "If r = 0, its sign shall be that of x. remainder(x, ∞) is x for finite x. | 16:12 | ||
But I guess not everyone agrees whether they're doing "remainder" or "modulo" :/ | 16:13 | ||
moritz | if r = 0, its sign doesn't matter :-) | ||
r's sign, that is | 16:14 | ||
japhb | Of course it does. | 16:19 | |
IOninja | m: say atan2 -0e0, -1e0 | 16:20 | |
camelia | rakudo-moar 1615c8: OUTPUT«-3.14159265358979» | ||
IOninja | m: say atan2 0e0, -1e0 | ||
camelia | rakudo-moar 1615c8: OUTPUT«3.14159265358979» | ||
IOninja | :) | ||
moritz | please don't let any mathematicians find out about this. | 16:22 | |
IOninja | heh | ||
japhb | My math professor designed a fair portion of that. | ||
IOninja | :o | ||
japhb | en.wikipedia.org/wiki/William_Kahan | 16:24 | |
IOninja | fancy pants | 16:31 | |
m: sub e ($x, $y ) {42}; say e -2, 2 | 16:36 | ||
camelia | rakudo-moar 1615c8: OUTPUT«0.7182818284590462» | ||
IOninja | m: sub pi ($x, $y ) {42}; say pi -2, 2 | 16:37 | |
camelia | rakudo-moar 1615c8: OUTPUT«1.141592653589792» | ||
IOninja | m: constant meow = 70; sub meow ($x, $y ) {42}; say meow -2, 2 | ||
camelia | rakudo-moar 1615c8: OUTPUT«682» | ||
IOninja | LTA IMO | 16:38 | |
jnthn | Note that's no conflict here, since the sub's actual name in the symbol table is &meov | 16:40 | |
&meow even | 16:41 | ||
IOninja | yeah... | ||
jnthn | And listop syntax is unambiguously looking for a sub | ||
camelia m: constant meow = 70; sub meow ($x, $y ) {42}; say meow, -2, 2 | 16:42 | ||
camelia | jnthn: rakudo-moar 1615c8: OUTPUT«70-22» | ||
IOninja | m: constant meow = 70; sub meow ($x, $y ) {42}; say meow 2, 2 | 16:43 | |
camelia | rakudo-moar 1615c8: OUTPUT«5===SORRY!5=== Error while compiling <tmp>Two terms in a rowat <tmp>:1------> 3 = 70; sub meow ($x, $y ) {42}; say meow7⏏5 2, 2 expecting any of: infix infix stopper postfix statement end …» | ||
IOninja | All the more reason to pushback adding all bunch of core constant that jjmerelo wanted to add a while back | ||
took me awhile to notice the problem: gist.github.com/zoffixznet/292d563...6fd1b09e28 | 16:45 | ||
'cause the sub was supposed to produce a number, I was just getting the wrong one :P | |||
k, -42e0 % 2e0 => 0e0 (and not -0e0) is not a bug 'cause we don't do IEEE's remainder in that operator. | 16:50 | ||
'cause 5 % 2 would be -1 then... | 16:51 | ||
Java has Math.IEEEremainder just for that heh | |||
How does core.d stuff work? Is it just additive to core? I got this diff gist.github.com/zoffixznet/043124e...c904b9ea6a but it fails these three tests: github.com/perl6/roast/blob/e73bb6...v.t#L9-L11 I figured it's 6.d material... do I just stick those ops to core.d? | 17:05 | ||
src/core.d/Num.pm? | |||
and how will the non-src/core stuff be handled. Like lib/Test.pm6 will lose is_approx() in 6.d... | 17:08 | ||
[Coke] | test files will have to explicitly have 6.c or 6.d in them. | 17:10 | |
(and while master can have both, maybe 6.d branch and 6.c branch have only those that apply) | 17:11 | ||
IOninja | well, just stuffing gist.github.com/zoffixznet/b981f82...d5ca90d7cd into src/core.d/Num.pm didn't do anything. | 17:13 | |
Gonna leave this for now, I guess | 17:14 | ||
[Coke] | is there a framework to augment the default one with anything found in d? | 17:17 | |
TimToady would prefer to keep base 1 out of core; would be fine in a module though | 19:00 | ||
IOninja | +1 | 19:02 | |
pyrimidine | Anyone have an idea what might be going on w/ RT #130709 or RT #130535 | 19:11 | |
synopsebot6 | Link: rt.perl.org/rt3//Public/Bug/Displa...?id=130709 | ||
Link: rt.perl.org/rt3//Public/Bug/Displa...?id=130535 | |||
pyrimidine | These are both linked to 'require' not working, seems to be related to bug fix for lexical module loading | 19:12 | |
(should say, 'not working as expected'). nine++ points out a fix may need some thought | 19:13 | ||
timotimo is surprised base1 isn't getting much love | 19:15 | ||
people use it for turing machines all the time! | 19:16 | ||
IOninja | it's not just base1 it's its wild difference from all the other bases | ||
timotimo | you think? | 19:17 | |
IOninja | think what? | ||
timotimo | i disagree, the formula is the same | ||
999 is 9 * 10^3 + 9 * 10^2 + 9 * 10^1 | |||
111 is 1 * 1^3 + 1 * 1^2 + 1 * 1^1 | |||
TimToady | it is fundamentally different, insofar as it cannot support fractions | ||
timotimo | that's a point i'll concede | 19:18 | |
IOninja | timotimo: what's your formula for zero? :) | ||
timotimo | "" is | ||
IOninja | lol | ||
timotimo | seriously. | ||
10 is 1 * 1^2, 1 is 1 * 1^1, is | 19:19 | ||
perlpilot | Base 1 supports an infinite number of fractions! They're just also wholes too ;) | ||
IOninja | timotimo: so the result is ""? | ||
timotimo: that means it'd be "" for all the other bases too :) | 19:20 | ||
timotimo | no, the result is evaluating the mathematical formula | ||
IOninja | that's special cased for base-1 | ||
timotimo | hm. | ||
TimToady | actually, the special case is all the other bases requiring a leading 0 in-band | 19:21 | |
but I still don't think base1 belongs in core | |||
timotimo | you've got the final word if you want | ||
just need to sit in your seat :) | |||
the special one | 19:22 | ||
TimToady | plus we already have base-1 operators built in, they're just spelled funny | ||
which is fine, since base-1 is funny | 19:23 | ||
timotimo | we have ~, but we don't have something corresponding to -, or any kind of "get the inverse element of a base1 number" | ||
TimToady | big loss... | ||
timotimo | well, you could "-" ~ $base-one-number | ||
but ~ won't honour negative base one numbers | |||
TimToady | exploring all these delightful ramifications is a good use for a module | 19:24 | |
timotimo | fair enough | ||
IOninja | m: say ~42 | 19:25 | |
camelia | rakudo-moar 1615c8: OUTPUT«42» | ||
timotimo | we'll also totally want a slang that'll interpret numbers that are made up of only 1 as base-1 | ||
IOninja | m: sub baseit ($n, $b) { sum do for $n.comb.reverse.pairs { .value * ($b**.key) } }; say baseit "", 2 | 19:27 | |
camelia | rakudo-moar 1615c8: OUTPUT«0» | ||
IOninja | m: sub baseit ($n, $b) { sum do for $n.comb.reverse.pairs { .value * ($b**.key) } }; say baseit "22", 2 | ||
camelia | rakudo-moar 1615c8: OUTPUT«6» | ||
IOninja | hehe :) | ||
TimToady | and on the roman numeral argument, we only support those to the extent they come for free with Unicode | ||
IOninja | m: say :1<111> | 19:30 | |
camelia | rakudo-moar 1615c8: OUTPUT«5===SORRY!5=== Error while compiling <tmp>Radix 1 out of range (allowed: 1..36)at <tmp>:1------> 3say :1<111>7⏏5<EOL>» | ||
TimToady | I'm afraid that, at least for me, this whole thing falls rather too far (for my comfort) into the "you think that's cute today" category.... | 19:32 | |
it would be okay as a degenerate case if it were, in fact, a degenerate case, but it's a discontinuity, really | 19:33 | ||
it's only a degenerate case if you squint | 19:34 | ||
perlpilot | .oO( makes me think "squinting at degenerates" is a useful phrase for something ) |
19:53 | |
geekosaur | only if you're usan x.x | 19:55 | |
TimToady | how come there's no SQUINTING FACE? | 19:58 | |
how are supposed to convey suspicion with emoticons? | |||
they need a DUBIOUS FACE or so... | 19:59 | ||
IOninja | u: 🤔 | 20:02 | |
unicodable6 | IOninja, U+1F914 THINKING FACE [So] (🤔) | ||
IOninja | u: 🤨 | ||
unicodable6 | IOninja, U+1F928 <reserved> [Cn] (🤨) | ||
IOninja | Well, "Face With One Eyebrow Raised" is a proposed part of Unicode 10: emojipedia.org/unicode-10.0/ | 20:04 | |
.oO( didn't they *just* make a unicode release? ) |
|||
there's even 11 already: emojipedia.org/unicode-11.0/ | 20:05 | ||
That will bring the "Mooncake" emoji... can't wait | |||
TimToady | raising an eyebrow is not really quite the same as squinting | 20:06 | |
IOninja | u: 😑 | 20:08 | |
unicodable6 | IOninja, U+1F611 EXPRESSIONLESS FACE [So] (😑) | ||
IOninja | That one looks squinting... | ||
TimToady | you can't use a neutral for a strong negative | 20:09 | |
IOninja | Instead of adding all these faces they clearly should just make separate face parts that you join with ZWS :) | 20:11 | |
combine with skin tones and sex emojis for that perfect emoji face :P | |||
TimToady | then we'd have to deal with CLOWN NOSE and such.. | ||
IOninja | u: CLOWN | 20:12 | |
unicodable6 | IOninja, U+1F921 CLOWN FACE [So] (🤡) | ||
IOninja | Looks like you're person #11,213 to want this emoji :) www.emojirequest.com/r/SuspiciousEmoji | 20:13 | |
¬_¬ | 20:14 | ||
TimToady | that's a double negative you've got there... | 20:15 | |
IOninja | heh | 20:16 | |
TimToady wonders how space aliens with eyes on stalks express suspicion... | 20:18 | ||
nine | llfourn: you seem to understand rt.perl.org/Public/Bug/Display.html?id=130535 | 20:20 | |
That's intriguing: method run() { require ::('C::B') } fails with No such symbol C::B while method run() { require ::('C::B'); 1 } does not throw any error when called. | 20:26 | ||
TimToady: the wantedness seems to make the difference, right? | |||
Ok, looks like require really needs a closer look or three. But not today. Good night! | 20:32 | ||
timotimo | nite nine! | 20:46 | |
dogbert17 | jnthn, timotimo: are you good C hackers :) | 21:28 | |
should I use a %d format specifier to fprintf a variable of type size_t? | 21:30 | ||
jnthn | No, that sounds wrong :) | 21:32 | |
dogbert17 | what would you suggest | ||
jnthn | %d is for int | ||
And only 32-bit you'll get away with it | |||
dogbert17 | which I have :) | 21:33 | |
I'm beginnig to suspect that we have a 32 bit problem here (with the GC) | |||
jnthn | %zd I think | ||
dogbert17 | look at this (printed with %d) | ||
jnthn | oh, maybe %zu for unsinged | 21:34 | |
dogbert17 | is_full_collection: promoted = 29046306, rss = 299098112, percent_growth = 9. | ||
looks reasonable | |||
is_full_collection: promoted = 199464970, rss = 607739904, percent_growth = 4. hmmm | |||
promoted is multiplied by 100 in the percentage_growth calculation, couldn't that lead to overflow on 32 bit? | 21:36 | ||
%zu didn't work, is_full_collection: promoted = 21361621, rss = 97067008, percent_growth = 22. at program start | 21:43 | ||
sry, that's ok | |||
jnthn | On overlow - hmm, what type did we do the calc in... | ||
dogbert17 | github.com/MoarVM/MoarVM/blob/mast...ate.c#L288 | 21:45 | |
is_full_collection: promoted = 478401828, rss = 861716480, percent_growth = 0. # with %zu | |||
using - fprintf(stderr, "is_full_collection: promoted = %zu, rss = %zu, percent_growth = %d.\n", promoted, rss, percent_growth); | 21:46 | ||
jnthn | m: say 478401828 / 861716480 | 21:47 | |
camelia | rakudo-moar 1615c8: OUTPUT«0.5551731214» | ||
jnthn | oops :) | 21:48 | |
size_t rss, promoted; | |||
d'oh | |||
percent_growth is 64-bit | |||
But it won't upgrade the other two before doing the calc | |||
Let's just declare them all as MVMuint64 | |||
Oh no, that'll bust something else :) | 21:49 | ||
dogbert17 | m: say (100 * 478401828) / 861716480 | ||
camelia | rakudo-moar 1615c8: OUTPUT«55.517312144» | ||
jnthn | rss must be declared size_t | ||
Because it's an out parameter | |||
dogbert17 | at least we know the real problem now :) | ||
jnthn | Yeah, really nice catch :) | ||
So, let's make MVMuint64 promoted | 21:51 | ||
And cast rss to MVMuint64 | |||
samcv | TimToady, I will revert the base 1 stuff later today when I have time, have some appointments today | ||
thank you for weighing in | |||
dogbert17 | I'll give it a shot | ||
timotimo | good catch dogbert | 21:59 | |
dogbert17 | jnthn, timotimo: is this correct? gist.github.com/dogbert17/8e0061b9...d6f663a5ed | 22:45 | |
timotimo | looks correct at first glance | 22:49 | |
dogbert17 | thx timotimo, running spectest now | 22:54 |