Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
March 21, 2018 pow | ||||
---|---|---|---|---|
| ||||
why pow(256, 27) gives 0, instead of 105312291668557186697918027683670432318895095400549111254310977536L |
March 21, 2018 Re: pow | ||||
---|---|---|---|---|
| ||||
Posted in reply to aerto | On Wednesday, 21 March 2018 at 15:56:00 UTC, aerto wrote:
> why pow(256, 27) gives 0, instead of 105312291668557186697918027683670432318895095400549111254310977536L
that result is simply too big to fit in the result. Try using a bigint instead:
import std.bigint, std.stdio;
void main() {
BigInt i = 256;
i ^^= 27;
writeln(i);
}
|
March 21, 2018 Re: pow | ||||
---|---|---|---|---|
| ||||
Posted in reply to aerto | On Wed, Mar 21, 2018 at 03:56:00PM +0000, aerto via Digitalmars-d wrote: > why pow(256, 27) gives 0, instead of 105312291668557186697918027683670432318895095400549111254310977536L Because 256, being an int type, can only hold a 32-bit result, the maximum of which is 2^31 (or 2^32 if you use uint). But 256^27 = 2^216, far bigger than a 32-bit int can hold. As Adam said, you probably want to use BigInt instead: import std.bigint; auto result = pow(BigInt(256), 27); T -- Food and laptops don't mix. |
March 21, 2018 Re: pow | ||||
---|---|---|---|---|
| ||||
Posted in reply to Adam D. Ruppe | On Wednesday, 21 March 2018 at 16:00:56 UTC, Adam D. Ruppe wrote: > On Wednesday, 21 March 2018 at 15:56:00 UTC, aerto wrote: >> why pow(256, 27) gives 0, instead of 105312291668557186697918027683670432318895095400549111254310977536L > > that result is simply too big to fit in the result. Try using a bigint instead: > > import std.bigint, std.stdio; > > void main() { > BigInt i = 256; > i ^^= 27; > writeln(i); > } thanks, a last question in a diffrent function i use writeln(105312291668557186697918027683670432318895095400549111254310977536L); and i get Error: integer overflow any solution >? |
March 21, 2018 Re: pow | ||||
---|---|---|---|---|
| ||||
Posted in reply to aerto | On Wednesday, 21 March 2018 at 16:29:26 UTC, aerto wrote: > thanks, a last question in a diffrent function i use use BigInt i = "105312291668557186697918027683670432318895095400549111254310977536"; and it should work. Note the quotation marks - it reads it as a string because a long number literal is limited o 64 bit representations. |
Copyright © 1999-2021 by the D Language Foundation