Как стать автором
Обновить
0
0

Пользователь

Отправить сообщение
Когда-то изучал OpenGL вклюяая тесселяцию и неплохо разобрался. Сейчас уже не до него, но хочется понять как именно сюда вставили трассировку лучей? Или в этом API этого нет и не будет?
16гб, 64бит.
Памяти хватает, свап файл не используется
ghc 8.0.2
go 1.11
всегда подозрительно, когда у хаскелиста не так, как у гофера или любого другого императивщика))
а если замерить секундомером, а не встроенным тестированием?
ghc -O2 Main.hs
за 8 минут прога не выдала ответа для миллиарда и мне стало лень ждать (миллион посчитался корректно и быстро)
возникает вопрос, а это точно будет выполняться один раз, а не каждый раз цикла?
int64(math.Sqrt(float64(n)))
о маленькое. Попробовал Большое — стало 3:20. Лучше, но гоу всё-равно обычгрывает
Не упомянул, что запускал на линуксе. Проц Intel Core i5 8250U 1600 МГц
Не уверен, что выставил правильную оптимизацию в с++ компиляторе.
Выложите код на хаскеле одним файлом, чтоб я тоже запустил. Интересно.
Golang медленнее С++ чуть более чем в 2 раза

У меня получилось с точностью наоборот…
Автор хотел GOLANG?
на моём проце
1) голанг считал 2 минуты 3 секунды
2) с++ считал 3 минут 20 секунд (компилил прогу так g++ -O2 -o m m.cpp)
3) хаскель проверить не смог, ибо тут не весь код, а я не шарю

Пусть автор проверит голанг.
Могу сказать, что похоже с гошкой есть чит — проц 4 ядра, на виртуальных ядер 8. Голанг как-то захапал оба виртуальных ядра на 100%, в отличии от с++

package main

import (
	"fmt"
	"math"
)

func main() {
	n := 1000 * 1000 * 1000 //2497558338
	//n = 1000000             //2480437

	arr := make([]int, n+1)
	sqrtn := int(math.Sqrt(float64(n)))
	for k1 := 1; k1 <= sqrtn; k1++ {
		nk1 := n / k1
		for k2 := k1; k2 <= nk1; k2++ {
			if k1 != k2 {
				arr[k1*k2] += k1 + k2
			} else {
				arr[k1*k2] += k1
			}
		}
	}
	fmt.Printf("%d\n", arr[n])

}

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Зарегистрирован
Активность