Why does not my program is not running?

Unknow via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Aug 20 14:29:14 PDT 2015


On Thursday, 20 August 2015 at 21:10:27 UTC, Steven Schveighoffer 
wrote:
> On 8/20/15 4:31 PM, Unknow wrote:
>> module main;
>>
>> import std.file;
>> import std.conv;
>>
>> long factorial(long i){
>>      if (i == 0){
>>          return 1;
>>      }else{
>>          return(i * factorial(i-1));
>>      }
>> }
>
> Note, this is not going to work. At 21!, long will run out of 
> bits.
>
> From https://en.wikipedia.org/wiki/Factorial, 100! is 
> 9.332621544×10^157, requiring 157 *decimal* digits, not to 
> mention the base-2 digits that would be required.
>
>>
>> void main(string[] args){
>>      real *e; e = new real; *e = 0; long *integer; integer = 
>> new long;
>> *integer = 1;
>
> There is no need for this, you are making pointers from 
> everything, just declare the variables:
>
> real e = 0;
> long integer = 1;
>
>
>>      for(; *integer <= 100; *integer++){
>
> And here is why you crash. *integer++ means return the value 
> currently pointed at by integer, then increment the POINTER by 
> one. This points at some garbage memory (on my system, it 
> happens to be zeroed, so it didn't crash).
>
> Not using pointers will help a lot in this code.
>
>>          *e = (*e) + (*integer / factorial(*integer));
>
> The second portion of this calculation is INTEGER math, which 
> means except for 1 / 1, it's going to be 0. What you want is 
> (with new style that doesn't use pointers):
>
> e = e + (real(integer) / factorial(integer));
>
> The real(...) casts the result to a real before continuing.
>
>>      }
>>      if(exists("e") != 0)
>>      {
>>          std.file.write("e", to!string(*e));
>
> Just want to confirm here, you are writing e only if it 
> *already exists*?
>
>>      }else{
>>          //...
>>      }
>>      delete(e); delete(integer);
>
> Without pointers, you would remove these. In addition, you do 
> not need to delete pointers even if you did use them -- D is 
> garbage collected.
>
>> }
>
> -Steve

Thanks a lot of! Im new to D lang.


More information about the Digitalmars-d-learn mailing list