Липперт и Random
От: Qodomoc Россия  
Дата: 18.09.14 10:47
Оценка: 21 (2)
Занимательный вопрос от Липперта:
http://blog.coverity.com/2014/09/17/spot-defect-randomness/#.VBq4A_kS3Hs.
Re: Липперт и Random
От: hardcase Пират http://nemerle.org
Дата: 18.09.14 11:03
Оценка:
Здравствуйте, Qodomoc, Вы писали:

Q>Занимательный вопрос от Липперта:


Слишком просто
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: Липперт и Random
От: Qodomoc Россия  
Дата: 18.09.14 11:05
Оценка:
H>Слишком просто

Не nikov, это да.
Re: Липперт и Random
От: Mr.Delphist  
Дата: 18.09.14 13:24
Оценка:
Здравствуйте, Qodomoc, Вы писали:

Q>Занимательный вопрос от Липперта:

Q>http://blog.coverity.com/2014/09/17/spot-defect-randomness/#.VBq4A_kS3Hs.

Соглашусь, слишком простой вопрос. Вообще сама задумка преобразовывать в строку всё число только лишь для того чтобы взять первую цифру десятичного представления — плохое решение. Всё равно что делать "select * from MyTable" только лишь для того, чтобы посчитать количество записей, а далее на клиенте вручную итерироваться по всему датасету и инкрементить счётчик.
Re: Липперт и Random
От: nikov США http://www.linkedin.com/in/nikov
Дата: 18.09.14 16:57
Оценка: 44 (3)
Здравствуйте, Qodomoc, Вы писали:

Q>Занимательный вопрос от Липперта:

Q>http://blog.coverity.com/2014/09/17/spot-defect-randomness/#.VBq4A_kS3Hs.

Как уже написали в комментариях, первая проблема, которая может привести к неравномерному распределению — это scientific E notation.
Но есть и другая проблема, которая может покрешить программу с IndexOutOfRangeException. Она связана с тем, что оверлоад double.ToString() без параметров преобразует число в строку с потерей информации (и с возможным округлением). Чтобы получить точное представление, нужно использовать double.ToString("R").

5.9999999999999991.ToString() ==> 6
5.9999999999999991.ToString("R") ==> 5.9999999999999991
double.Equals(5.9999999999999991, 6) ==> False

The Round-trip (“R”) Format Specifier
Re: Липперт и Random
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 18.09.14 17:49
Оценка: +2 :)
Здравствуйте, Qodomoc, Вы писали:

Q>Занимательный вопрос от Липперта:

Q>http://blog.coverity.com/2014/09/17/spot-defect-randomness/#.VBq4A_kS3Hs.

Какой ужас — почему-то сразу вспомнился код:
bool val;
if (val.ToString().Length < 5)
{
  //val is true
}
[КУ] оккупировала армия.
Re: Липперт и Double.ToString()
От: tlp  
Дата: 18.09.14 18:01
Оценка:
FTFY
Re[2]: Липперт и Random
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 19.09.14 00:25
Оценка:
Здравствуйте, Mr.Delphist, Вы писали:

MD>Вообще сама задумка преобразовывать в строку всё число только лишь для того чтобы взять первую цифру десятичного представления — плохое решение.


Продемонстрируй свой вариант.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[3]: Липперт и Random
От: QrystaL Украина  
Дата: 19.09.14 07:07
Оценка:
Здравствуйте, AndrewVK, Вы писали:
AVK>Продемонстрируй свой вариант.
Math.Truncate()
Re[4]: Липперт и Random
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 19.09.14 13:33
Оценка:
Здравствуйте, QrystaL, Вы писали:

QL>Math.Truncate()


Это несколько не то. Хотя в контексте кубиков, конечно, подойдет.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re: Липперт и Random
От: btn1  
Дата: 19.09.14 16:07
Оценка:
Здравствуйте, Qodomoc, Вы писали:

Q>Занимательный вопрос от Липперта:


Проблема тут?

> string s1 = d2.ToString();


В s1 может попасть не только что-то типа 3.758032, но и 0.063e2 — так?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.