2015-01-19 2 views
-4

я следующий код в Русте:Rust математическая ошибка

fn main() { 

    let mut sum = 0is; 
    for i in (0is..100000000is) { 
     sum = sum + i; 
    } 
    println! ("{}", sum); 
} 

в результате, у меня есть 4999999950000000

Но, когда я пытаюсь проверить этот код с Golang и Руби - я вижу другой результат

версия

golang:

package main 

import "fmt" 

func main() { 
    var sum = 0 
    for i := 1; i < 99999999; i++ { 
     sum += i 
    } 

    fmt.Println(sum) 
} 

Рубин версия:

@sum = 0 
(1...99999999).each do |i| 
    @sum += i 
end 

puts @sum 

и результат как для Ruby, и Golang является 4999999850000001

PS: да, я знаю о разнице между 100000000 и 99999999 - это из-за включения правой части в Русте в 0is..100000000is

+0

Вы можете выбрать, чтобы использовать калькулятор, чтобы проверить результаты _перед_ при условии, что есть математическая ошибка в/с Rust. (Подсказка: не используйте 999999999 как число, но возможно 3 или около того). – topskip

ответ

5

Вы не суммируя последний элемент (99999999) в Go и Руби:

func main() { 
    var sum = int64(0) 
    for i := int64(1); i <= 99999999; i++ { 
     sum += i 
    } 
    fmt.Println(sum) 
} 

4999999950000000 
Смежные вопросы